This example shows that some of the information available from the emotion object, like the media file play length, aspect ratio, etc.
This example shows that some of the information available from the emotion object, like the media file play length, aspect ratio, etc. can be not available just after setting the file to the emotion object.
One callback is declared for each of the following signals, and some of the info about the file is displayed. Also notice that the order that these signals are emitted can change depending on the module being used. Following is the full source code of this example:
#ifndef EFL_BETA_API_SUPPORT
# define EFL_BETA_API_SUPPORT
#endif
#include <Ecore.h>
#include <Evas.h>
#include <stdio.h>
#define WIDTH (320)
#define HEIGHT (240)
static void
_display_info(Evas_Object *o)
{
int w, h;
printf("meta title: %s\n",
printf("seek position: %0.3f\n",
printf("play length: %0.3f\n",
printf("is seekable: %d\n",
printf("video geometry: %dx%d\n", w, h);
printf("video width / height ratio: %0.3f\n",
printf("\n");
}
static void
_playback_started_cb(
void *data
EINA_UNUSED,
const Efl_Event *ev)
{
printf(">>> Emotion object started playback.\n");
_display_info(ev->object);
}
static void
_playback_finished_cb(
void *data
EINA_UNUSED,
const Efl_Event *ev)
{
printf(">>> Emotion object finished playback.\n");
_display_info(ev->object);
}
static void
_open_done_cb(
void *data
EINA_UNUSED,
const Efl_Event *ev)
{
printf(">>> Emotion object open done.\n");
_display_info(ev->object);
}
static void
_position_update_cb(
void *data
EINA_UNUSED,
const Efl_Event *ev)
{
printf(">>> Emotion object first position update.\n");
efl_event_callback_del(ev->object, EFL_CANVAS_VIDEO_EVENT_POSITION_CHANGE, _position_update_cb, NULL);
_display_info(ev->object);
}
static void
_frame_decode_cb(
void *data
EINA_UNUSED,
const Efl_Event *ev)
{
printf(">>> Emotion object first frame decode.\n");
efl_event_callback_del(ev->object, EFL_CANVAS_VIDEO_EVENT_FRAME_DECODE, _frame_decode_cb, NULL);
_display_info(ev->object);
}
static void
_decode_stop_cb(
void *data
EINA_UNUSED,
const Efl_Event *ev)
{
printf(">>> Emotion object decode stop.\n");
_display_info(ev->object);
}
static void
_frame_resize_cb(
void *data
EINA_UNUSED,
const Efl_Event *ev)
{
printf(">>> Emotion object frame resize.\n");
_display_info(ev->object);
}
EFL_CALLBACKS_ARRAY_DEFINE(emotion_object_example_callbacks,
{ EFL_CANVAS_VIDEO_EVENT_PLAYBACK_START, _playback_started_cb },
{ EFL_CANVAS_VIDEO_EVENT_PLAYBACK_STOP, _playback_finished_cb },
{ EFL_CANVAS_VIDEO_EVENT_OPEN_DONE, _open_done_cb },
{ EFL_CANVAS_VIDEO_EVENT_POSITION_CHANGE, _position_update_cb },
{ EFL_CANVAS_VIDEO_EVENT_FRAME_DECODE, _frame_decode_cb },
{ EFL_CANVAS_VIDEO_EVENT_PLAYBACK_STOP, _decode_stop_cb },
{ EFL_CANVAS_VIDEO_EVENT_FRAME_RESIZE, _frame_resize_cb });
int
main(int argc, const char *argv[])
{
Ecore_Evas *ee;
Evas *e;
Evas_Object *bg, *em;
const char *filename = NULL;
const char *module = NULL;
if (argc < 2)
{
printf("At least one argument is necessary. Usage:\n");
printf("\t%s <filename> [module_name]\n", argv[0]);
goto error;
}
filename = argv[1];
if (argc >= 3)
module = argv[2];
return EXIT_FAILURE;
if (!ee)
goto error;
if (!emotion_object_init(em, module))
fprintf(stderr, "Emotion: \"%s\" module could not be initialized.\n", module);
_display_info(em);
efl_event_callback_array_add(em, emotion_object_example_callbacks(), NULL);
fprintf(stderr, "Emotion: Could not load the file \"%s\"\n", filename);
return 0;
error:
return -1;
}
@ EMOTION_META_INFO_TRACK_TITLE
track title
Definition Emotion.h:156
EAPI int ecore_evas_init(void)
Inits the Ecore_Evas system.
Definition ecore_evas.c:608
EAPI void ecore_evas_show(Ecore_Evas *ee)
Shows an Ecore_Evas' window.
Definition ecore_evas.c:1494
EAPI Evas * ecore_evas_get(const Ecore_Evas *ee)
Gets an Ecore_Evas's Evas.
Definition ecore_evas.c:1314
EAPI Ecore_Evas * ecore_evas_new(const char *engine_name, int x, int y, int w, int h, const char *extra_options)
Creates a new Ecore_Evas based on engine name and common parameters.
Definition ecore_evas.c:1053
EAPI int ecore_evas_shutdown(void)
Shuts down the Ecore_Evas system.
Definition ecore_evas.c:672
EAPI void ecore_evas_free(Ecore_Evas *ee)
Frees an Ecore_Evas.
Definition ecore_evas.c:1097
void ecore_main_loop_begin(void)
Runs the application main loop.
Definition ecore_main.c:1311
#define EINA_TRUE
boolean value TRUE (numerical value 1)
Definition eina_types.h:539
#define EINA_UNUSED
Used to indicate that a function parameter is purposely unused.
Definition eina_types.h:339
EMOTION_API const char * emotion_object_meta_info_get(const Evas_Object *obj, Emotion_Meta_Info meta)
Retrieve meta information from this file being played.
Definition emotion_smart.c:1284
EMOTION_API Evas_Object * emotion_object_add(Evas *evas)
Add an emotion object to the canvas.
Definition emotion_smart.c:237
EMOTION_API Eina_Bool emotion_object_file_set(Evas_Object *obj, const char *filename)
Set the file to be played in the Emotion object.
Definition emotion_smart.c:355
EMOTION_API void emotion_object_play_set(Evas_Object *obj, Eina_Bool play)
Set play/pause state of the media file.
Definition emotion_smart.c:653
EMOTION_API Eina_Bool emotion_object_play_get(const Evas_Object *obj)
Get play/pause state of the media file.
Definition emotion_smart.c:714
EMOTION_API double emotion_object_play_length_get(const Evas_Object *obj)
Get the length of play for the media file.
Definition emotion_smart.c:810
EMOTION_API double emotion_object_position_get(const Evas_Object *obj)
Get the position in the media file.
Definition emotion_smart.c:760
EMOTION_API Eina_Bool emotion_object_seekable_get(const Evas_Object *obj)
Get whether the media file is seekable.
Definition emotion_smart.c:784
EMOTION_API void emotion_object_size_get(const Evas_Object *obj, int *iw, int *ih)
Retrieve the video size of the loaded file.
Definition emotion_smart.c:816
EMOTION_API double emotion_object_ratio_get(const Evas_Object *obj)
Retrieve the video aspect ratio of the media file loaded.
Definition emotion_smart.c:857
EVAS_API void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition evas_object_main.c:1814
EVAS_API void evas_object_name_set(Evas_Object *eo_obj, const char *name)
Sets the name of the given Evas object to the given name.
Definition evas_name.c:5
EVAS_API void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a)
Sets the general/main color of the given Evas object to the given one.
Definition evas_object_main.c:2024
EVAS_API void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
Move the given Evas object to the given location inside its canvas' viewport.
Definition evas_object_main.c:1171
EVAS_API void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
Changes the size of the given Evas object.
Definition evas_object_main.c:1236
EVAS_API Evas_Object * evas_object_rectangle_add(Evas *e)
Adds a rectangle to the given evas.
Definition evas_object_rectangle.c:78