forked from enlightenment/efl
evas: integrate evas generic loaders into our single tree build system.
This commit is contained in:
parent
36f15d761a
commit
6b5ed1b711
19
AUTHORS
19
AUTHORS
|
@ -149,6 +149,25 @@ Michelle Legrand <legrand.michelle@outlook.com>
|
||||||
Romain Perier <romain.perier@openwide.fr>
|
Romain Perier <romain.perier@openwide.fr>
|
||||||
Subodh Kumar <s7158.kumar@samsung.com>
|
Subodh Kumar <s7158.kumar@samsung.com>
|
||||||
|
|
||||||
|
Evas Generic Loaders
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The Rasterman (Carsten Haitzler) <raster@rasterman.com>
|
||||||
|
Christian Kreibich <cK@whoop.org>
|
||||||
|
Vincent Torri <vtorri at univ-evry dot fr>
|
||||||
|
Michael Bouchaud <michael.bouchaud@gmail.com>
|
||||||
|
Fanina "cippp" Cristian <fancris3@gmail.com>
|
||||||
|
Cedric BAIL <cedric.bail@free.fr>
|
||||||
|
Jérémy Zurcher <jeremy@asynk.ch>
|
||||||
|
Stefan Schmidt <stefan@datenfreihafen.org>
|
||||||
|
Daniel Juyung Seo <seojuyung2@gmail.com>
|
||||||
|
Doug Newgard <scimmia22@outlook.com>
|
||||||
|
Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
|
||||||
|
Alex-P. Natsios <drakevr@linuxteam.teilar.gr>
|
||||||
|
Jihoon Kim <imfine98@gmail.com>
|
||||||
|
Samuel F. Baggen <thanatermesis.elive@gmail.com>
|
||||||
|
Sebastian Dransfeld <sd@tango.flipp.net>
|
||||||
|
|
||||||
Ecore
|
Ecore
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
2
COPYING
2
COPYING
|
@ -34,6 +34,8 @@ ethumb: licenses/COPYING.LGPL
|
||||||
eolian: licenses/COPYING.BSD
|
eolian: licenses/COPYING.BSD
|
||||||
elua: licenses/COPYING.BSD
|
elua: licenses/COPYING.BSD
|
||||||
elementary: licenses/COPYING.LGPL
|
elementary: licenses/COPYING.LGPL
|
||||||
|
generic/evas: licenses/COPYING.GPL (separate binary/executable)
|
||||||
|
generic/emotion: licenses/COPYING.GPL (separate binary/executable)
|
||||||
|
|
||||||
NOTE: If linked together, the result will be effectively be LGPL (or
|
NOTE: If linked together, the result will be effectively be LGPL (or
|
||||||
GPL if escape is used) due to license characteristics.
|
GPL if escape is used) due to license characteristics.
|
||||||
|
|
93
configure.ac
93
configure.ac
|
@ -2807,6 +2807,99 @@ EFL_ADD_FEATURE([EVAS], [tile-rotate])
|
||||||
EFL_ADD_FEATURE([EVAS], [dither-mask], [${build_evas_dither_mask}])
|
EFL_ADD_FEATURE([EVAS], [dither-mask], [${build_evas_dither_mask}])
|
||||||
EFL_ADD_FEATURE([EVAS], [hyphen])
|
EFL_ADD_FEATURE([EVAS], [hyphen])
|
||||||
|
|
||||||
|
#### Generic backend
|
||||||
|
|
||||||
|
### Option to turn on generic loader for evas
|
||||||
|
want_poppler="no"
|
||||||
|
want_spectre="no"
|
||||||
|
want_libraw="no"
|
||||||
|
want_rsvg="no"
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([poppler],
|
||||||
|
[AC_HELP_STRING([--enable-poppler], [enable poppler support @<:@default==disabled@:>@])],
|
||||||
|
[want_poppler=$enableval])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([spectre],
|
||||||
|
[AC_HELP_STRING([--enable-spectre], [enable spectre support @<:@default==disabled@:>@])],
|
||||||
|
[want_spectre=$enableval])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([libraw],
|
||||||
|
[AC_HELP_STRING([--enable-libraw], [enable libraw support @<:@default==disabled@:>@])],
|
||||||
|
[want_libraw=$enableval])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([librsvg],
|
||||||
|
[AC_HELP_STRING([--enable-librsvg], [enable svg support @<:@default==disabled@:>@])],
|
||||||
|
[want_rsvg=$enableval])
|
||||||
|
|
||||||
|
have_poppler="no"
|
||||||
|
have_spectre="no"
|
||||||
|
have_raw="no"
|
||||||
|
have_rsvg="no"
|
||||||
|
|
||||||
|
### Check needed dependency for each generic loader
|
||||||
|
if test "x${want_poppler}" = "xyes"; then
|
||||||
|
PKG_CHECK_EXISTS([poppler >= 0.12 poppler < 0.20],
|
||||||
|
[
|
||||||
|
poppler_pc="poppler >= 0.12 poppler < 0.20"
|
||||||
|
have_poppler="yes"
|
||||||
|
],
|
||||||
|
[have_poppler="no"])
|
||||||
|
|
||||||
|
if test "x${have_poppler}" = "xno" ; then
|
||||||
|
PKG_CHECK_EXISTS([poppler >= 0.20 poppler < 0.31],
|
||||||
|
[
|
||||||
|
poppler_pc="poppler >= 0.20 poppler < 0.31"
|
||||||
|
AC_DEFINE(HAVE_POPPLER_020, 1, [Have poppler 0.20])
|
||||||
|
have_poppler="yes"
|
||||||
|
],
|
||||||
|
[have_poppler="no"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${have_poppler}" = "xno" ; then
|
||||||
|
PKG_CHECK_EXISTS([poppler >= 0.31],
|
||||||
|
[
|
||||||
|
poppler_pc="poppler >= 0.31"
|
||||||
|
AC_DEFINE(HAVE_POPPLER_031, 1, [Have poppler 0.31])
|
||||||
|
have_poppler="yes"
|
||||||
|
],
|
||||||
|
[have_poppler="no"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${have_poppler}" = "xyes" ; then
|
||||||
|
PKG_CHECK_MODULES([POPPLER], [${poppler_pc}],
|
||||||
|
[have_poppler="yes"])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${want_spectre}" = "xyes"; then
|
||||||
|
PKG_CHECK_MODULES([SPECTRE], [libspectre], [have_spectre="yes"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${want_libraw}" = "xyes"; then
|
||||||
|
PKG_CHECK_MODULES([LIBRAW], [libraw], [have_raw="yes"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${want_librsvg}" = "xyes"; then
|
||||||
|
PKG_CHECK_MODULES([RSVG], [librsvg-2.0 >= 2.14.0 cairo >= 1.0.0], [have_rsvg="yes"])
|
||||||
|
PKG_CHECK_MODULES(
|
||||||
|
[SVG_2_36], [librsvg-2.0 >= 2.36.0 cairo >= 1.0.0],
|
||||||
|
[
|
||||||
|
have_rsvg_2_36="yes"
|
||||||
|
AC_DEFINE(HAVE_SVG_2_36, 1, [Have librsvg >= 2.36])
|
||||||
|
],
|
||||||
|
[have_rsvg_2_36="no"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([HAVE_POPPLER], [test "x${have_poppler}" = "xyes"])
|
||||||
|
AM_CONDITIONAL([HAVE_SPECTRE], [test "x${have_spectre}" = "xyes"])
|
||||||
|
AM_CONDITIONAL([HAVE_LIBRAW], [test "x${have_raw}" = "xyes"])
|
||||||
|
AM_CONDITIONAL([HAVE_RSVG], [test "x${have_rsvg}" = "xyes"])
|
||||||
|
|
||||||
|
EFL_ADD_FEATURE([EVAS_LOADER], [poppler], [${want_poppler}])
|
||||||
|
EFL_ADD_FEATURE([EVAS_LOADER], [spectre], [${want_spectre}])
|
||||||
|
EFL_ADD_FEATURE([EVAS_LOADER], [raw], [${want_libraw}])
|
||||||
|
EFL_ADD_FEATURE([EVAS_LOADER], [rsvg], [${want_rsvg}])
|
||||||
|
|
||||||
EFL_LIB_END([Evas])
|
EFL_LIB_END([Evas])
|
||||||
#### End of Evas
|
#### End of Evas
|
||||||
|
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
dnl EMOTION_GENERIC_PLAYER(NAME, DEFAULT_STATE, [PKG_CONFIG_DEPS])
|
|
||||||
dnl Does the following:
|
|
||||||
dnl * AC_ARG_WITH(NAME)
|
|
||||||
dnl * define with_name to yes or no
|
|
||||||
dnl * PKG_CHECK_MODULES(NAME, PKG_CONFIG_DEPS)
|
|
||||||
dnl * AC_DEFINE([HAVE_NAME])
|
|
||||||
dnl * AM_CONDITIONAL([HAVE_NAME])
|
|
||||||
AC_DEFUN([EMOTION_GENERIC_PLAYER],
|
|
||||||
[dnl
|
|
||||||
m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
|
|
||||||
m4_pushdef([UP], m4_translit([$1], [-a-z], [_A-Z]))dnl
|
|
||||||
|
|
||||||
AC_ARG_WITH([DOWN],
|
|
||||||
[AC_HELP_STRING([--with-]m4_defn([DOWN]),
|
|
||||||
[build generic player ]m4_defn([UP])[. @<:@default=$2@:>@])],
|
|
||||||
[], [with_]m4_defn([DOWN])[="$2"])
|
|
||||||
|
|
||||||
if test "${with_[]m4_defn([DOWN])}" = "yes"; then
|
|
||||||
m4_ifval([$3], [dnl
|
|
||||||
PKG_CHECK_MODULES(m4_defn([UP]), [$3])
|
|
||||||
], [dnl
|
|
||||||
m4_defn([UP])_LIBS="${m4_defn([UP])_LIBS}"
|
|
||||||
m4_defn([UP])_CFLAGS="${m4_defn([UP])_CFLAGS}"
|
|
||||||
AC_SUBST(m4_defn([UP])[_LIBS])
|
|
||||||
AC_SUBST(m4_defn([UP])[_CFLAGS])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_SEARCH_LIBS([shm_open], [rt], [], [AC_MSG_ERROR([unable to find the shm_open() function])])
|
|
||||||
if test "${ac_cv_search_shm_open}" != "none required"; then
|
|
||||||
m4_defn([UP])_LIBS="${m4_defn([UP])_LIBS} ${ac_cv_search_shm_open}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([HAVE_]m4_defn([UP]), [test "$with_[]m4_defn([DOWN])" = "yes"])
|
|
||||||
|
|
||||||
m4_popdef([UP])dnl
|
|
||||||
m4_popdef([DOWN])dnl
|
|
||||||
])
|
|
|
@ -1,790 +0,0 @@
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <poll.h>
|
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#include <vlc/vlc.h>
|
|
||||||
|
|
||||||
#include <Emotion_Generic_Plugin.h>
|
|
||||||
#include <Eina.h>
|
|
||||||
#include <Ecore.h>
|
|
||||||
|
|
||||||
static int _em_vlc_log_dom = -1;
|
|
||||||
#define ERR(...) EINA_LOG_DOM_ERR(_em_vlc_log_dom, __VA_ARGS__)
|
|
||||||
#define DBG(...) EINA_LOG_DOM_DBG(_em_vlc_log_dom, __VA_ARGS__)
|
|
||||||
#define INF(...) EINA_LOG_DOM_INFO(_em_vlc_log_dom, __VA_ARGS__)
|
|
||||||
#define WRN(...) EINA_LOG_DOM_WARN(_em_vlc_log_dom, __VA_ARGS__)
|
|
||||||
#define CRIT(...) EINA_LOG_DOM_CRIT(_em_vlc_log_dom, __VA_ARGS__)
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _App App;
|
|
||||||
struct _App {
|
|
||||||
Emotion_Generic_Video_Shared *vs;
|
|
||||||
Emotion_Generic_Video_Frame vf;
|
|
||||||
|
|
||||||
libvlc_instance_t *libvlc;
|
|
||||||
libvlc_media_t *m;
|
|
||||||
libvlc_media_player_t *mp;
|
|
||||||
libvlc_event_manager_t *event_mgr;
|
|
||||||
|
|
||||||
Ecore_Pipe *fd_read; // read commands from emotion here
|
|
||||||
Ecore_Pipe *fd_write; // write commands for emotion here
|
|
||||||
Eina_Lock cmd_mutex;// lock used to send just one command at a time
|
|
||||||
int last_order; // current command received from emotion
|
|
||||||
|
|
||||||
char *filename;
|
|
||||||
char *subtitle_path;
|
|
||||||
char *shmname;
|
|
||||||
unsigned w, h;
|
|
||||||
int volume;
|
|
||||||
Eina_Bool audio_muted;
|
|
||||||
|
|
||||||
Eina_Bool opening;
|
|
||||||
Eina_Bool closing;
|
|
||||||
Eina_Bool playing;
|
|
||||||
Eina_Bool inited;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void _player_setup(App *app);
|
|
||||||
|
|
||||||
|
|
||||||
/* Utilities to send commands back to emotion */
|
|
||||||
#define SEND_CMD_PARAM(app, i) \
|
|
||||||
if ((app)->fd_write) \
|
|
||||||
if (!ecore_pipe_write((app)->fd_write, &(i), sizeof((i)))) \
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_cmd(App *app, int cmd)
|
|
||||||
{
|
|
||||||
if (!app->fd_write)
|
|
||||||
return;
|
|
||||||
|
|
||||||
eina_lock_take(&app->cmd_mutex); /* LOCK HERE */
|
|
||||||
|
|
||||||
if (!ecore_pipe_write(app->fd_write, &cmd, sizeof(cmd)))
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_cmd_str(App *app, const char *str)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len = str ? strlen(str) + 1 : 0;
|
|
||||||
if (app->fd_write)
|
|
||||||
if (!ecore_pipe_write(app->fd_write, &len, sizeof(len)))
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
if (app->fd_write)
|
|
||||||
if (!ecore_pipe_write(app->fd_write, str, len))
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_cmd_finish(App *app)
|
|
||||||
{
|
|
||||||
eina_lock_release(&app->cmd_mutex); /* UNLOCK HERE */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Commands sent to the emotion pipe */
|
|
||||||
static void
|
|
||||||
_send_file_closed(App *app)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_FILE_CLOSE);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_time_changed(App *app)
|
|
||||||
{
|
|
||||||
float new_time;
|
|
||||||
|
|
||||||
if (app->vs->frame_drop > 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
new_time = libvlc_media_player_get_time(app->mp);
|
|
||||||
new_time /= 1000;
|
|
||||||
_send_cmd(app, EM_RESULT_POSITION_CHANGED);
|
|
||||||
SEND_CMD_PARAM(app, new_time);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_resize(App *app, int width, int height)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_FRAME_SIZE);
|
|
||||||
SEND_CMD_PARAM(app, width);
|
|
||||||
SEND_CMD_PARAM(app, height);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_track_info(App *app, int cmd, int current, int count, libvlc_track_description_t *desc)
|
|
||||||
{
|
|
||||||
_send_cmd(app, cmd);
|
|
||||||
SEND_CMD_PARAM(app, current);
|
|
||||||
SEND_CMD_PARAM(app, count);
|
|
||||||
while (desc)
|
|
||||||
{
|
|
||||||
int tid = desc->i_id;
|
|
||||||
const char *name = desc->psz_name;
|
|
||||||
SEND_CMD_PARAM(app, tid);
|
|
||||||
_send_cmd_str(app, name);
|
|
||||||
desc = desc->p_next;
|
|
||||||
}
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_all_track_info(App *app)
|
|
||||||
{
|
|
||||||
int track_count, current;
|
|
||||||
libvlc_track_description_t *desc;
|
|
||||||
|
|
||||||
current = libvlc_audio_get_track(app->mp);
|
|
||||||
track_count = libvlc_audio_get_track_count(app->mp);
|
|
||||||
desc = libvlc_audio_get_track_description(app->mp);
|
|
||||||
|
|
||||||
_send_track_info(app, EM_RESULT_AUDIO_TRACK_INFO,
|
|
||||||
current, track_count, desc);
|
|
||||||
|
|
||||||
current = libvlc_video_get_track(app->mp);
|
|
||||||
track_count = libvlc_video_get_track_count(app->mp);
|
|
||||||
desc = libvlc_video_get_track_description(app->mp);
|
|
||||||
|
|
||||||
_send_track_info(app, EM_RESULT_VIDEO_TRACK_INFO,
|
|
||||||
current, track_count, desc);
|
|
||||||
|
|
||||||
current = libvlc_video_get_spu(app->mp);
|
|
||||||
track_count = libvlc_video_get_spu_count(app->mp);
|
|
||||||
desc = libvlc_video_get_spu_description(app->mp);
|
|
||||||
|
|
||||||
_send_track_info(app, EM_RESULT_SPU_TRACK_INFO,
|
|
||||||
current, track_count, desc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_all_meta_info(App *app)
|
|
||||||
{
|
|
||||||
const char *meta;
|
|
||||||
|
|
||||||
_send_cmd(app, EM_RESULT_META_INFO);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Will send in this order: title, artist, album, year,
|
|
||||||
* genre, comments, disc id and track count.
|
|
||||||
*/
|
|
||||||
meta = libvlc_media_get_meta(app->m, libvlc_meta_Title);
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
meta = libvlc_media_get_meta(app->m, libvlc_meta_Artist);
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
meta = libvlc_media_get_meta(app->m, libvlc_meta_Album);
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
meta = libvlc_media_get_meta(app->m, libvlc_meta_Date);
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
meta = libvlc_media_get_meta(app->m, libvlc_meta_Genre);
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
meta = NULL; // sending empty comments
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
meta = NULL; // sending empty disc id
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
meta = libvlc_media_get_meta(app->m, libvlc_meta_TrackNumber);
|
|
||||||
_send_cmd_str(app, meta);
|
|
||||||
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_length_changed(App *app)
|
|
||||||
{
|
|
||||||
float length = libvlc_media_player_get_length(app->mp);
|
|
||||||
|
|
||||||
length /= 1000;
|
|
||||||
_send_cmd(app, EM_RESULT_LENGTH_CHANGED);
|
|
||||||
SEND_CMD_PARAM(app, length);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_seekable_changed(App *app, const struct libvlc_event_t *ev)
|
|
||||||
{
|
|
||||||
int seekable = ev->u.media_player_seekable_changed.new_seekable;
|
|
||||||
|
|
||||||
_send_cmd(app, EM_RESULT_SEEKABLE_CHANGED);
|
|
||||||
SEND_CMD_PARAM(app, seekable);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_playback_started(App *app)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_PLAYBACK_STARTED);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_playback_stopped(App *app)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_PLAYBACK_STOPPED);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_init(App *app)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_INIT);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_file_set(App *app)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_FILE_SET);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_send_file_set_done(App *app, int success)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_FILE_SET_DONE);
|
|
||||||
SEND_CMD_PARAM(app, success);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* VLC events and callbacks */
|
|
||||||
static void
|
|
||||||
_event_cb(const struct libvlc_event_t *ev, void *data)
|
|
||||||
{
|
|
||||||
App *app = data;
|
|
||||||
|
|
||||||
ecore_thread_main_loop_begin();
|
|
||||||
switch (ev->type)
|
|
||||||
{
|
|
||||||
case libvlc_MediaPlayerTimeChanged:
|
|
||||||
// DBG("libvlc_MediaPlayerTimeChanged");
|
|
||||||
_send_time_changed(app);
|
|
||||||
break;
|
|
||||||
case libvlc_MediaPlayerLengthChanged:
|
|
||||||
DBG("libvlc_MediaPlayerLengthChanged");
|
|
||||||
_send_length_changed(app);
|
|
||||||
break;
|
|
||||||
case libvlc_MediaPlayerSeekableChanged:
|
|
||||||
DBG("libvlc_MediaPlayerSeekableChanged");
|
|
||||||
_send_seekable_changed(app, ev);
|
|
||||||
break;
|
|
||||||
case libvlc_MediaPlayerPlaying:
|
|
||||||
DBG("libvlc_MediaPlayerPlaying");
|
|
||||||
libvlc_audio_set_volume(app->mp, app->volume);
|
|
||||||
libvlc_audio_set_mute(app->mp, app->audio_muted);
|
|
||||||
_send_playback_started(app);
|
|
||||||
break;
|
|
||||||
case libvlc_MediaPlayerStopped:
|
|
||||||
DBG("libvlc_MediaPlayerStopped");
|
|
||||||
_send_playback_stopped(app);
|
|
||||||
if (app->closing)
|
|
||||||
{
|
|
||||||
free(app->filename);
|
|
||||||
app->filename = NULL;
|
|
||||||
free(app->subtitle_path);
|
|
||||||
app->subtitle_path = NULL;
|
|
||||||
libvlc_media_release(app->m);
|
|
||||||
app->m = NULL;
|
|
||||||
libvlc_media_player_release(app->mp);
|
|
||||||
app->mp = NULL;
|
|
||||||
emotion_generic_shm_free(app->vs);
|
|
||||||
app->playing = EINA_FALSE;
|
|
||||||
app->closing = EINA_FALSE;
|
|
||||||
_send_file_closed(app);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case libvlc_MediaPlayerEndReached:
|
|
||||||
DBG("libvlc_MediaPlayerEndReached");
|
|
||||||
app->playing = EINA_FALSE;
|
|
||||||
/* vlc had released the media_playere here, we create a new one */
|
|
||||||
app->mp = libvlc_media_player_new_from_media(app->m);
|
|
||||||
_player_setup(app);
|
|
||||||
_send_playback_stopped(app);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ecore_thread_main_loop_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_tmp_playing_event_cb(const struct libvlc_event_t *ev, void *data)
|
|
||||||
{
|
|
||||||
App *app = data;
|
|
||||||
|
|
||||||
if (ev->type != libvlc_MediaPlayerPlaying)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* pause and stop listening the temporary event */
|
|
||||||
libvlc_event_detach(app->event_mgr,libvlc_MediaPlayerPlaying,
|
|
||||||
_tmp_playing_event_cb, app);
|
|
||||||
libvlc_media_player_set_pause(app->mp, 1);
|
|
||||||
|
|
||||||
/* sending size info */
|
|
||||||
libvlc_video_get_size(app->mp, 0, &app->w, &app->h);
|
|
||||||
_send_resize(app, app->w, app->h);
|
|
||||||
|
|
||||||
/* sending total lenght */
|
|
||||||
_send_length_changed(app);
|
|
||||||
|
|
||||||
/* sending audio track info */
|
|
||||||
_send_all_track_info(app);
|
|
||||||
|
|
||||||
/* sending meta info */
|
|
||||||
_send_all_meta_info(app);
|
|
||||||
|
|
||||||
/* ok, we are done! Now let emotion create the shmem for us */
|
|
||||||
_send_file_set(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *
|
|
||||||
_lock(void *data, void **pixels)
|
|
||||||
{
|
|
||||||
App *app = data;
|
|
||||||
|
|
||||||
if (app->playing)
|
|
||||||
*pixels = app->vf.frames[app->vs->frame.player];
|
|
||||||
else
|
|
||||||
*pixels = NULL;
|
|
||||||
|
|
||||||
return NULL; // picture identifier, not needed here
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_unlock(void *data EINA_UNUSED, void *id EINA_UNUSED, void *const *pixels EINA_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_display(void *data, void *id EINA_UNUSED)
|
|
||||||
{
|
|
||||||
App *app = data;
|
|
||||||
|
|
||||||
if (!app->playing)
|
|
||||||
return;
|
|
||||||
|
|
||||||
eina_semaphore_lock(&app->vs->lock);
|
|
||||||
app->vs->frame.last = app->vs->frame.player;
|
|
||||||
app->vs->frame.player = app->vs->frame.next;
|
|
||||||
app->vs->frame.next = app->vs->frame.last;
|
|
||||||
if (!app->vs->frame_drop++)
|
|
||||||
{
|
|
||||||
_send_cmd(app, EM_RESULT_FRAME_NEW);
|
|
||||||
_send_cmd_finish(app);
|
|
||||||
}
|
|
||||||
eina_semaphore_release(&app->vs->lock, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_player_setup(App *app)
|
|
||||||
{
|
|
||||||
|
|
||||||
libvlc_video_set_format(app->mp, "RV32", app->w, app->h, app->w * 4);
|
|
||||||
libvlc_video_set_callbacks(app->mp, _lock, _unlock, _display, app);
|
|
||||||
|
|
||||||
app->event_mgr = libvlc_media_player_event_manager(app->mp);
|
|
||||||
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerPlaying,
|
|
||||||
_event_cb, app);
|
|
||||||
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerTimeChanged,
|
|
||||||
_event_cb, app);
|
|
||||||
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerLengthChanged,
|
|
||||||
_event_cb, app);
|
|
||||||
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerSeekableChanged,
|
|
||||||
_event_cb, app);
|
|
||||||
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerEndReached,
|
|
||||||
_event_cb, app);
|
|
||||||
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerStopped,
|
|
||||||
_event_cb, app);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Commands received from the emotion pipe */
|
|
||||||
static void
|
|
||||||
_file_set(App *app)
|
|
||||||
{
|
|
||||||
DBG("Path: %s", app->filename);
|
|
||||||
app->m = libvlc_media_new_path(app->libvlc, app->filename);
|
|
||||||
if (!app->m)
|
|
||||||
{
|
|
||||||
ERR("could not open path: \"%s\"", app->filename);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
app->mp = libvlc_media_player_new_from_media(app->m);
|
|
||||||
if (!app->mp)
|
|
||||||
{
|
|
||||||
ERR("could not create new player from media.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
app->opening = EINA_TRUE;
|
|
||||||
|
|
||||||
/* Here we start playing and connect a temporary callback to know when
|
|
||||||
* the file is parsed and ready to be played for real.
|
|
||||||
*/
|
|
||||||
app->event_mgr = libvlc_media_player_event_manager(app->mp);
|
|
||||||
libvlc_event_attach(app->event_mgr, libvlc_MediaPlayerPlaying,
|
|
||||||
_tmp_playing_event_cb, app);
|
|
||||||
|
|
||||||
libvlc_media_player_play(app->mp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_file_set_done(App *app)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
DBG("Path: %s", app->filename);
|
|
||||||
app->opening = EINA_FALSE;
|
|
||||||
|
|
||||||
r = emotion_generic_shm_get(app->shmname, &app->vs, &app->vf);
|
|
||||||
if (!r)
|
|
||||||
{
|
|
||||||
free(app->filename);
|
|
||||||
libvlc_media_release(app->m);
|
|
||||||
libvlc_media_player_release(app->mp);
|
|
||||||
app->filename = NULL;
|
|
||||||
app->m = NULL;
|
|
||||||
app->mp = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_player_setup(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
_send_file_set_done(app, r);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_file_close(App *app)
|
|
||||||
{
|
|
||||||
DBG("closing file");
|
|
||||||
|
|
||||||
if (!app->mp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
app->closing = EINA_TRUE;
|
|
||||||
libvlc_media_player_stop(app->mp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_stop(App *app)
|
|
||||||
{
|
|
||||||
DBG("Stop");
|
|
||||||
if (app->mp)
|
|
||||||
libvlc_media_player_set_pause(app->mp, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_play(App *app, float pos)
|
|
||||||
{
|
|
||||||
DBG("Play at %.3f", pos);
|
|
||||||
|
|
||||||
if (!app->mp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (app->playing)
|
|
||||||
{
|
|
||||||
libvlc_media_player_set_pause(app->mp, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
libvlc_time_t new_time = pos * 1000;
|
|
||||||
libvlc_media_player_set_time(app->mp, new_time);
|
|
||||||
libvlc_media_player_play(app->mp);
|
|
||||||
|
|
||||||
if (app->subtitle_path)
|
|
||||||
libvlc_video_set_subtitle_file(app->mp, app->subtitle_path);
|
|
||||||
|
|
||||||
app->playing = EINA_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_position_set(App *app, float position)
|
|
||||||
{
|
|
||||||
libvlc_time_t new_time;
|
|
||||||
|
|
||||||
DBG("Position set %.3f", position);
|
|
||||||
if (!app->mp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
new_time = position * 1000;
|
|
||||||
libvlc_media_player_set_time(app->mp, new_time);
|
|
||||||
|
|
||||||
if (libvlc_media_player_get_state(app->mp) == libvlc_Paused)
|
|
||||||
_send_time_changed(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_speed_set(App *app, float rate)
|
|
||||||
{
|
|
||||||
DBG("Speed set %.3f", rate);
|
|
||||||
if (!app->mp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
libvlc_media_player_set_rate(app->mp, rate);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_mute_set(App *app, int mute)
|
|
||||||
{
|
|
||||||
DBG("Mute %d", mute);
|
|
||||||
if (!app->mp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
app->audio_muted = mute;
|
|
||||||
libvlc_audio_set_mute(app->mp, mute);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_volume_set(App *app, float volume)
|
|
||||||
{
|
|
||||||
DBG("Volume set %.2f", volume);
|
|
||||||
if (!app->mp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
app->volume = volume * 100;
|
|
||||||
libvlc_audio_set_volume(app->mp, app->volume);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_spu_track_set(App *app, int track)
|
|
||||||
{
|
|
||||||
DBG("SPU track %d", track);
|
|
||||||
libvlc_video_set_spu(app->mp, track);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_audio_track_set(App *app, int track)
|
|
||||||
{
|
|
||||||
DBG("Audio track %d", track);
|
|
||||||
libvlc_audio_set_track(app->mp, track);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_video_track_set(App *app, int track)
|
|
||||||
{
|
|
||||||
DBG("Video Track %d", track);
|
|
||||||
libvlc_video_set_track(app->mp, track);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_remote_command(void *data, void *buffer, unsigned int nbyte)
|
|
||||||
{
|
|
||||||
App *app = data;
|
|
||||||
|
|
||||||
if (nbyte == 0)
|
|
||||||
{
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (app->last_order == EM_CMD_LAST)
|
|
||||||
{
|
|
||||||
if (nbyte != sizeof (int))
|
|
||||||
{
|
|
||||||
ERR("didn't receive a valid command from emotion (%i) !", nbyte);
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
app->last_order = *((int*) buffer);
|
|
||||||
|
|
||||||
if (!app->inited &&
|
|
||||||
app->last_order != EM_CMD_INIT)
|
|
||||||
{
|
|
||||||
ERR("wrong init command!");
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (app->last_order)
|
|
||||||
{
|
|
||||||
case EM_CMD_FILE_SET:
|
|
||||||
if (app->opening)
|
|
||||||
{
|
|
||||||
libvlc_media_release(app->m);
|
|
||||||
libvlc_media_player_release(app->mp);
|
|
||||||
free(app->filename);
|
|
||||||
app->opening = EINA_FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EM_CMD_FILE_SET_DONE:
|
|
||||||
_file_set_done(app);
|
|
||||||
app->last_order = EM_CMD_LAST;
|
|
||||||
break;
|
|
||||||
case EM_CMD_FILE_CLOSE:
|
|
||||||
_file_close(app);
|
|
||||||
app->last_order = EM_CMD_LAST;
|
|
||||||
break;
|
|
||||||
case EM_CMD_STOP:
|
|
||||||
_stop(app);
|
|
||||||
app->last_order = EM_CMD_LAST;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (app->last_order)
|
|
||||||
{
|
|
||||||
case EM_CMD_INIT:
|
|
||||||
app->shmname = strdup(buffer);
|
|
||||||
app->inited = EINA_TRUE;
|
|
||||||
_send_init(app);
|
|
||||||
break;
|
|
||||||
case EM_CMD_FILE_SET:
|
|
||||||
app->filename = strdup(buffer);
|
|
||||||
_file_set(app);
|
|
||||||
break;
|
|
||||||
case EM_CMD_SUBTITLE_SET:
|
|
||||||
app->subtitle_path = strdup(buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_PLAY:
|
|
||||||
_play(app, *(float*) buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_POSITION_SET:
|
|
||||||
_position_set(app, *(float*) buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_SPEED_SET:
|
|
||||||
_speed_set(app, *(float*) buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_AUDIO_MUTE_SET:
|
|
||||||
_mute_set(app, *(int*) buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_VOLUME_SET:
|
|
||||||
_volume_set(app, *(float*) buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_SPU_TRACK_SET:
|
|
||||||
_spu_track_set(app, *(int*) buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_AUDIO_TRACK_SET:
|
|
||||||
_audio_track_set(app, *(int*) buffer);
|
|
||||||
break;
|
|
||||||
case EM_CMD_VIDEO_TRACK_SET:
|
|
||||||
_video_track_set(app, *(int*) buffer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
app->last_order = EM_CMD_LAST;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_dummy(void *data EINA_UNUSED, void *buffer EINA_UNUSED, unsigned int nbyte EINA_UNUSED)
|
|
||||||
{
|
|
||||||
/* This function is useless for the pipe we use to send message back
|
|
||||||
to emotion, but still needed */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Main */
|
|
||||||
static Eina_Bool
|
|
||||||
exit_func(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev EINA_UNUSED)
|
|
||||||
{
|
|
||||||
DBG("Quit signal received !");
|
|
||||||
ecore_main_loop_quit();
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, const char *argv[])
|
|
||||||
{
|
|
||||||
App app;
|
|
||||||
Ecore_Event_Handler *hld;
|
|
||||||
int vlc_argc;
|
|
||||||
|
|
||||||
const char *vlc_argv[] =
|
|
||||||
{
|
|
||||||
"--quiet",
|
|
||||||
"--intf", "dummy", /* no interface */
|
|
||||||
"--vout", "dummy", /* we don't want video (output) */
|
|
||||||
"--no-video-title-show", /* nor the filename displayed */
|
|
||||||
"--no-sub-autodetect-file", /* we don't want automatic subtitles */
|
|
||||||
"--no-stats", /* no stats */
|
|
||||||
"--no-inhibit", /* we don't want interfaces */
|
|
||||||
"--no-disable-screensaver", /* we don't want interfaces */
|
|
||||||
// XXX: causes newer vlcs to segv!
|
|
||||||
// "--codec", "avcodec",
|
|
||||||
// XXX: disable this just in case
|
|
||||||
// "--demux", "avformat"
|
|
||||||
};
|
|
||||||
vlc_argc = sizeof(vlc_argv) / sizeof(*vlc_argv);
|
|
||||||
|
|
||||||
memset(&app, 0, sizeof(app));
|
|
||||||
if (!eina_init())
|
|
||||||
{
|
|
||||||
EINA_LOG_CRIT("Can't initialize generic vlc player, eina failed.");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
_em_vlc_log_dom = eina_log_domain_register("emotion_generic_vlc",
|
|
||||||
EINA_COLOR_CYAN);
|
|
||||||
if (_em_vlc_log_dom < 0)
|
|
||||||
{
|
|
||||||
EINA_LOG_CRIT("Unable to register emotion_generic_vlc log domain.");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!eina_log_domain_level_check(_em_vlc_log_dom, EINA_LOG_LEVEL_WARN))
|
|
||||||
eina_log_domain_level_set("emotion_generic_vlc", EINA_LOG_LEVEL_WARN);
|
|
||||||
|
|
||||||
if (argc < 3)
|
|
||||||
{
|
|
||||||
ERR("missing parameters.");
|
|
||||||
ERR("syntax:\n\t%s <fd read> <fd write>", argv[0]);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
ecore_init();
|
|
||||||
|
|
||||||
eina_lock_new(&app.cmd_mutex);
|
|
||||||
|
|
||||||
app.fd_read = ecore_pipe_full_add(_remote_command, &app,
|
|
||||||
atoi(argv[1]), -1, EINA_FALSE, EINA_FALSE);
|
|
||||||
app.fd_write = ecore_pipe_full_add(_dummy, NULL,
|
|
||||||
-1, atoi(argv[2]), EINA_FALSE, EINA_FALSE);
|
|
||||||
|
|
||||||
hld = ecore_event_handler_add(ECORE_EVENT_SIGNAL_HUP, exit_func, NULL);
|
|
||||||
|
|
||||||
app.libvlc = libvlc_new(vlc_argc, vlc_argv);
|
|
||||||
app.mp = NULL;
|
|
||||||
app.filename = NULL;
|
|
||||||
app.subtitle_path = NULL;
|
|
||||||
app.w = 0;
|
|
||||||
app.h = 0;
|
|
||||||
app.opening = EINA_FALSE;
|
|
||||||
app.playing = EINA_FALSE;
|
|
||||||
app.inited = EINA_FALSE;
|
|
||||||
app.last_order = EM_CMD_LAST;
|
|
||||||
|
|
||||||
ecore_main_loop_begin();
|
|
||||||
|
|
||||||
libvlc_release(app.libvlc);
|
|
||||||
ecore_pipe_del(app.fd_read);
|
|
||||||
ecore_pipe_del(app.fd_write);
|
|
||||||
ecore_event_handler_del(hld);
|
|
||||||
eina_lock_free(&app.cmd_mutex);
|
|
||||||
|
|
||||||
ecore_shutdown();
|
|
||||||
eina_shutdown();
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
error:
|
|
||||||
eina_shutdown();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#undef SEND_CMD_PARAM
|
|
|
@ -1,15 +0,0 @@
|
||||||
The Rasterman (Carsten Haitzler) <raster@rasterman.com>
|
|
||||||
Christian Kreibich <cK@whoop.org>
|
|
||||||
Vincent Torri <vtorri at univ-evry dot fr>
|
|
||||||
Michael Bouchaud <michael.bouchaud@gmail.com>
|
|
||||||
Fanina "cippp" Cristian <fancris3@gmail.com>
|
|
||||||
Cedric BAIL <cedric.bail@free.fr>
|
|
||||||
Jérémy Zurcher <jeremy@asynk.ch>
|
|
||||||
Stefan Schmidt <stefan@datenfreihafen.org>
|
|
||||||
Daniel Juyung Seo <seojuyung2@gmail.com>
|
|
||||||
Doug Newgard <scimmia22@outlook.com>
|
|
||||||
Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
|
|
||||||
Alex-P. Natsios <drakevr@linuxteam.teilar.gr>
|
|
||||||
Jihoon Kim <imfine98@gmail.com>
|
|
||||||
Samuel F. Baggen <thanatermesis.elive@gmail.com>
|
|
||||||
Sebastian Dransfeld <sd@tango.flipp.net>
|
|
|
@ -1,356 +0,0 @@
|
||||||
Copyright notice for Evas generic loaders:
|
|
||||||
|
|
||||||
Copyright (C) 2011-2014 Carsten Haitzler and various contributors (see AUTHORS)
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms of the GNU General Public License as published by the
|
|
||||||
Free Software Foundation; version 2 of the License.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
Below is a copy of the GNU General Public License that is distributed
|
|
||||||
along with this library. If you do not have a copy below, write to the Free
|
|
||||||
Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
||||||
02110-1301 USA
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
License is intended to guarantee your freedom to share and change free
|
|
||||||
software--to make sure the software is free for all its users. This
|
|
||||||
General Public License applies to most of the Free Software
|
|
||||||
Foundation's software and to any other program whose authors commit to
|
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
|
||||||
the GNU Lesser General Public License instead.) You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if you
|
|
||||||
distribute copies of the software, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must give the recipients all the rights that
|
|
||||||
you have. You must make sure that they, too, receive or can get the
|
|
||||||
source code. And you must show them these terms so they know their
|
|
||||||
rights.
|
|
||||||
|
|
||||||
We protect your rights with two steps: (1) copyright the software, and
|
|
||||||
(2) offer you this license which gives you legal permission to copy,
|
|
||||||
distribute and/or modify the software.
|
|
||||||
|
|
||||||
Also, for each author's protection and ours, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
software. If the software is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original, so
|
|
||||||
that any problems introduced by others will not reflect on the original
|
|
||||||
authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that redistributors of a free
|
|
||||||
program will individually obtain patent licenses, in effect making the
|
|
||||||
program proprietary. To prevent this, we have made it clear that any
|
|
||||||
patent must be licensed for everyone's free use or not licensed at all.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License applies to any program or other work which contains
|
|
||||||
a notice placed by the copyright holder saying it may be distributed
|
|
||||||
under the terms of this General Public License. The "Program", below,
|
|
||||||
refers to any such program or work, and a "work based on the Program"
|
|
||||||
means either the Program or any derivative work under copyright law:
|
|
||||||
that is to say, a work containing the Program or a portion of it,
|
|
||||||
either verbatim or with modifications and/or translated into another
|
|
||||||
language. (Hereinafter, translation is included without limitation in
|
|
||||||
the term "modification".) Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running the Program is not restricted, and the output from the Program
|
|
||||||
is covered only if its contents constitute a work based on the
|
|
||||||
Program (independent of having been made by running the Program).
|
|
||||||
Whether that is true depends on what the Program does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Program's
|
|
||||||
source code as you receive it, in any medium, provided that you
|
|
||||||
conspicuously and appropriately publish on each copy an appropriate
|
|
||||||
copyright notice and disclaimer of warranty; keep intact all the
|
|
||||||
notices that refer to this License and to the absence of any warranty;
|
|
||||||
and give any other recipients of the Program a copy of this License
|
|
||||||
along with the Program.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy, and
|
|
||||||
you may at your option offer warranty protection in exchange for a fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Program or any portion
|
|
||||||
of it, thus forming a work based on the Program, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) You must cause the modified files to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
b) You must cause any work that you distribute or publish, that in
|
|
||||||
whole or in part contains or is derived from the Program or any
|
|
||||||
part thereof, to be licensed as a whole at no charge to all third
|
|
||||||
parties under the terms of this License.
|
|
||||||
|
|
||||||
c) If the modified program normally reads commands interactively
|
|
||||||
when run, you must cause it, when started running for such
|
|
||||||
interactive use in the most ordinary way, to print or display an
|
|
||||||
announcement including an appropriate copyright notice and a
|
|
||||||
notice that there is no warranty (or else, saying that you provide
|
|
||||||
a warranty) and that users may redistribute the program under
|
|
||||||
these conditions, and telling the user how to view a copy of this
|
|
||||||
License. (Exception: if the Program itself is interactive but
|
|
||||||
does not normally print such an announcement, your work based on
|
|
||||||
the Program is not required to print an announcement.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Program,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Program, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Program.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Program
|
|
||||||
with the Program (or with a work based on the Program) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may copy and distribute the Program (or a work based on it,
|
|
||||||
under Section 2) in object code or executable form under the terms of
|
|
||||||
Sections 1 and 2 above provided that you also do one of the following:
|
|
||||||
|
|
||||||
a) Accompany it with the complete corresponding machine-readable
|
|
||||||
source code, which must be distributed under the terms of Sections
|
|
||||||
1 and 2 above on a medium customarily used for software interchange; or,
|
|
||||||
|
|
||||||
b) Accompany it with a written offer, valid for at least three
|
|
||||||
years, to give any third party, for a charge no more than your
|
|
||||||
cost of physically performing source distribution, a complete
|
|
||||||
machine-readable copy of the corresponding source code, to be
|
|
||||||
distributed under the terms of Sections 1 and 2 above on a medium
|
|
||||||
customarily used for software interchange; or,
|
|
||||||
|
|
||||||
c) Accompany it with the information you received as to the offer
|
|
||||||
to distribute corresponding source code. (This alternative is
|
|
||||||
allowed only for noncommercial distribution and only if you
|
|
||||||
received the program in object code or executable form with such
|
|
||||||
an offer, in accord with Subsection b above.)
|
|
||||||
|
|
||||||
The source code for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For an executable work, complete source
|
|
||||||
code means all the source code for all modules it contains, plus any
|
|
||||||
associated interface definition files, plus the scripts used to
|
|
||||||
control compilation and installation of the executable. However, as a
|
|
||||||
special exception, the source code distributed need not include
|
|
||||||
anything that is normally distributed (in either source or binary
|
|
||||||
form) with the major components (compiler, kernel, and so on) of the
|
|
||||||
operating system on which the executable runs, unless that component
|
|
||||||
itself accompanies the executable.
|
|
||||||
|
|
||||||
If distribution of executable or object code is made by offering
|
|
||||||
access to copy from a designated place, then offering equivalent
|
|
||||||
access to copy the source code from the same place counts as
|
|
||||||
distribution of the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
|
||||||
except as expressly provided under this License. Any attempt
|
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
|
||||||
void, and will automatically terminate your rights under this License.
|
|
||||||
However, parties who have received copies, or rights, from you under
|
|
||||||
this License will not have their licenses terminated so long as such
|
|
||||||
parties remain in full compliance.
|
|
||||||
|
|
||||||
5. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Program or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Program (or any work based on the
|
|
||||||
Program), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Program or works based on it.
|
|
||||||
|
|
||||||
6. Each time you redistribute the Program (or any work based on the
|
|
||||||
Program), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute or modify the Program subject to
|
|
||||||
these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties to
|
|
||||||
this License.
|
|
||||||
|
|
||||||
7. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Program at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Program by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Program.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under
|
|
||||||
any particular circumstance, the balance of the section is intended to
|
|
||||||
apply and the section as a whole is intended to apply in other
|
|
||||||
circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system, which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Program under this License
|
|
||||||
may add an explicit geographical distribution limitation excluding
|
|
||||||
those countries, so that distribution is permitted only in or among
|
|
||||||
countries not thus excluded. In such case, this License incorporates
|
|
||||||
the limitation as if written in the body of this License.
|
|
||||||
|
|
||||||
9. The Free Software Foundation may publish revised and/or new versions
|
|
||||||
of the General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Program
|
|
||||||
specifies a version number of this License which applies to it and "any
|
|
||||||
later version", you have the option of following the terms and conditions
|
|
||||||
either of that version or of any later version published by the Free
|
|
||||||
Software Foundation. If the Program does not specify a version number of
|
|
||||||
this License, you may choose any version ever published by the Free Software
|
|
||||||
Foundation.
|
|
||||||
|
|
||||||
10. If you wish to incorporate parts of the Program into other free
|
|
||||||
programs whose distribution conditions are different, write to the author
|
|
||||||
to ask for permission. For software which is copyrighted by the Free
|
|
||||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
|
||||||
make exceptions for this. Our decision will be guided by the two goals
|
|
||||||
of preserving the free status of all derivatives of our free software and
|
|
||||||
of promoting the sharing and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
|
||||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
|
||||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
|
||||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
|
||||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
|
||||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
|
||||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
|
||||||
REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
|
||||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
|
||||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
|
||||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
|
||||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
|
||||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program is interactive, make it output a short notice like this
|
|
||||||
when it starts in an interactive mode:
|
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) year name of author
|
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, the commands you use may
|
|
||||||
be called something other than `show w' and `show c'; they could even be
|
|
||||||
mouse-clicks or menu items--whatever suits your program.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
|
||||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1989
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
This General Public License does not permit incorporating your program into
|
|
||||||
proprietary programs. If your program is a subroutine library, you may
|
|
||||||
consider it more useful to permit linking proprietary applications with the
|
|
||||||
library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License.
|
|
|
@ -1,24 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
SUBDIRS = common \
|
|
||||||
xcf
|
|
||||||
|
|
||||||
if HAVE_GST
|
|
||||||
SUBDIRS += gst
|
|
||||||
endif
|
|
||||||
|
|
||||||
if HAVE_PDF
|
|
||||||
SUBDIRS += pdf
|
|
||||||
endif
|
|
||||||
|
|
||||||
if HAVE_PS
|
|
||||||
SUBDIRS += ps
|
|
||||||
endif
|
|
||||||
|
|
||||||
if HAVE_RAW
|
|
||||||
SUBDIRS += raw
|
|
||||||
endif
|
|
||||||
|
|
||||||
if HAVE_SVG
|
|
||||||
SUBDIRS += svg
|
|
||||||
endif
|
|
|
@ -1,3 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
EXTRA_DIST = shmfile.c shmfile.h timeout.c timeout.h
|
|
|
@ -1,91 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
-I$(top_srcdir)/src \
|
|
||||||
-I$(top_srcdir)/src/bin \
|
|
||||||
-I$(top_srcdir)/src/bin/common \
|
|
||||||
-I$(top_srcdir)/src/bin/gst \
|
|
||||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
|
||||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
|
||||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
|
||||||
@EINA_CFLAGS@ \
|
|
||||||
@GSTREAMER_CFLAGS@
|
|
||||||
|
|
||||||
bin_PROGRAMS = evas_image_loader.gst
|
|
||||||
bindir = $(libdir)/evas/utils
|
|
||||||
|
|
||||||
if HAVE_GST1
|
|
||||||
|
|
||||||
evas_image_loader_gst_SOURCES = \
|
|
||||||
main.c \
|
|
||||||
$(top_srcdir)/src/bin/common/shmfile.c \
|
|
||||||
$(top_srcdir)/src/bin/common/timeout.c
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
evas_image_loader_gst_SOURCES = \
|
|
||||||
main_0_10.c \
|
|
||||||
$(top_srcdir)/src/bin/common/shmfile.c \
|
|
||||||
$(top_srcdir)/src/bin/common/timeout.c
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
evas_image_loader_gst_CFLAGS =
|
|
||||||
evas_image_loader_gst_LDADD = @GSTREAMER_LIBS@ @EINA_LIBS@ @SHM_OPEN_LIBS@
|
|
||||||
evas_image_loader_gst_LDFLAGS =
|
|
||||||
|
|
||||||
## good list of extensions:
|
|
||||||
## http://www.fileinfo.com/filetypes/video
|
|
||||||
## should check which ones gst does support and make sure they are here
|
|
||||||
install-exec-hook:
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.264
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.3g2
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.3gp
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.3gp2
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.3gpp
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.3gpp2
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.3p2
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.asf
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.avi
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.bdm
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.bdmv
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.clpi
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.cpi
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.dv
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.fla
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.flv
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.m1v
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.m2t
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.m2v
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.m4v
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mkv
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mov
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mp2
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mp2ts
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mp4
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mpe
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mpeg
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mpg
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mpl
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mpls
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mts
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mxf
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nut
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nuv
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ogg
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ogm
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ogv
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.qt
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rm
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rmj
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rmm
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rms
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rmx
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rmvb
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rv
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.swf
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ts
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.webm
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.weba
|
|
||||||
ln -sf evas_image_loader.gst $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.wmv
|
|
|
@ -1,292 +0,0 @@
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
#include <Eina.h>
|
|
||||||
|
|
||||||
#include "shmfile.h"
|
|
||||||
#include "timeout.h"
|
|
||||||
|
|
||||||
#define DATA32 unsigned int
|
|
||||||
|
|
||||||
//#define GST_DBG
|
|
||||||
|
|
||||||
#ifdef GST_DBG
|
|
||||||
#define D(fmt, args...) fprintf(stderr, fmt, ## args)
|
|
||||||
#else
|
|
||||||
#define D(fmt, args...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
# define CAPS "video/x-raw,format=ARGB"
|
|
||||||
#else
|
|
||||||
# define CAPS "video/x-raw,format=BGRA"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static GstElement *pipeline = NULL;
|
|
||||||
static GstElement *sink = NULL;
|
|
||||||
static gint64 duration = -1;
|
|
||||||
|
|
||||||
int width = 0;
|
|
||||||
int height = 0;
|
|
||||||
void *data = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
static Eina_Bool
|
|
||||||
_gst_init(const char *filename)
|
|
||||||
{
|
|
||||||
GstPad *pad;
|
|
||||||
GstCaps *caps;
|
|
||||||
GstStructure *structure;
|
|
||||||
gchar *descr;
|
|
||||||
gchar *uri;
|
|
||||||
GError *error = NULL;
|
|
||||||
GstFormat format;
|
|
||||||
GstStateChangeReturn ret;
|
|
||||||
// int vidstr = 0;
|
|
||||||
|
|
||||||
if (!filename || !*filename)
|
|
||||||
return EINA_FALSE;
|
|
||||||
|
|
||||||
if (!gst_init_check(NULL, NULL, &error))
|
|
||||||
return EINA_FALSE;
|
|
||||||
|
|
||||||
if ((*filename == '/') || (*filename == '~'))
|
|
||||||
{
|
|
||||||
uri = g_filename_to_uri(filename, NULL, NULL);
|
|
||||||
if (!uri)
|
|
||||||
{
|
|
||||||
D("could not create new uri from %s", filename);
|
|
||||||
goto unref_pipeline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
uri = strdup(filename);
|
|
||||||
|
|
||||||
D("Setting file %s\n", uri);
|
|
||||||
|
|
||||||
descr = g_strdup_printf("uridecodebin uri=%s ! typefind ! videoconvert ! "
|
|
||||||
" appsink name=sink caps=\"" CAPS "\"", uri);
|
|
||||||
pipeline = gst_parse_launch(descr, &error);
|
|
||||||
free(uri);
|
|
||||||
|
|
||||||
if (error != NULL)
|
|
||||||
{
|
|
||||||
D("could not construct pipeline: %s\n", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
goto gst_shutdown;
|
|
||||||
}
|
|
||||||
/* needs gst 1.0+
|
|
||||||
* also only works on playbin objects!!! this is a uridecodebin!
|
|
||||||
g_object_get(G_OBJECT(pipeline),
|
|
||||||
"n-video", &vidstr,
|
|
||||||
NULL);
|
|
||||||
if (vidstr <= 0)
|
|
||||||
{
|
|
||||||
D("no video stream\n");
|
|
||||||
goto gst_shutdown;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
|
|
||||||
|
|
||||||
ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
|
|
||||||
switch (ret)
|
|
||||||
{
|
|
||||||
case GST_STATE_CHANGE_FAILURE:
|
|
||||||
D("failed to play the file\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
case GST_STATE_CHANGE_NO_PREROLL:
|
|
||||||
D("live sources not supported yet\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = gst_element_get_state((pipeline), NULL, NULL, GST_CLOCK_TIME_NONE);
|
|
||||||
if (ret == GST_STATE_CHANGE_FAILURE)
|
|
||||||
{
|
|
||||||
D("could not complete pause\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
format = GST_FORMAT_TIME;
|
|
||||||
gst_element_query_duration (pipeline, format, &duration);
|
|
||||||
if (duration == -1)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "duration fetch err\n");
|
|
||||||
D("could not retrieve the duration, set it to 1s\n");
|
|
||||||
duration = 1 * GST_SECOND;
|
|
||||||
}
|
|
||||||
|
|
||||||
pad = gst_element_get_static_pad(sink, "sink");
|
|
||||||
if (!pad)
|
|
||||||
{
|
|
||||||
D("could not retrieve the sink pad\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
caps = gst_pad_get_current_caps(pad);
|
|
||||||
if (!caps)
|
|
||||||
goto unref_pad;
|
|
||||||
|
|
||||||
structure = gst_caps_get_structure(caps, 0);
|
|
||||||
|
|
||||||
if (!gst_structure_get_int(structure, "width", &width))
|
|
||||||
goto unref_caps;
|
|
||||||
if (!gst_structure_get_int(structure, "height", &height))
|
|
||||||
goto unref_caps;
|
|
||||||
|
|
||||||
gst_caps_unref(caps);
|
|
||||||
gst_object_unref(pad);
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
|
|
||||||
unref_caps:
|
|
||||||
gst_caps_unref(caps);
|
|
||||||
unref_pad:
|
|
||||||
gst_object_unref(pad);
|
|
||||||
unref_pipeline:
|
|
||||||
gst_element_set_state (pipeline, GST_STATE_NULL);
|
|
||||||
gst_object_unref(pipeline);
|
|
||||||
gst_shutdown:
|
|
||||||
gst_deinit();
|
|
||||||
|
|
||||||
return EINA_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_gst_shutdown()
|
|
||||||
{
|
|
||||||
gst_element_set_state (pipeline, GST_STATE_NULL);
|
|
||||||
gst_object_unref(pipeline);
|
|
||||||
gst_deinit();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_gst_load_image(int size_w EINA_UNUSED, int size_h EINA_UNUSED, double pos)
|
|
||||||
{
|
|
||||||
GstBuffer *buffer;
|
|
||||||
GstMapInfo info;
|
|
||||||
GstSample *sample;
|
|
||||||
|
|
||||||
D("load image\n");
|
|
||||||
if (pos >= 0.0)
|
|
||||||
gst_element_seek_simple(pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
|
|
||||||
pos);
|
|
||||||
else
|
|
||||||
gst_element_seek_simple(pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
|
|
||||||
duration / 2);
|
|
||||||
g_signal_emit_by_name(sink, "pull-preroll", &sample, NULL);
|
|
||||||
|
|
||||||
shm_alloc(width * height * sizeof(DATA32));
|
|
||||||
if (!shm_addr) return;
|
|
||||||
data = shm_addr;
|
|
||||||
|
|
||||||
buffer = gst_sample_get_buffer (sample);
|
|
||||||
gst_buffer_map (buffer, &info, GST_MAP_READ);
|
|
||||||
D("load image: %p %d\n", info.data, info.size);
|
|
||||||
|
|
||||||
memcpy(data, info.data, info.size);
|
|
||||||
|
|
||||||
gst_buffer_unmap(buffer, &info);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
char *file, *p;
|
|
||||||
int i, numonly;
|
|
||||||
int size_w = 0, size_h = 0;
|
|
||||||
int head_only = 0;
|
|
||||||
long long pos = -1.0;
|
|
||||||
|
|
||||||
if (argc < 2) return -1;
|
|
||||||
// file is ALWAYS first arg, other options come after
|
|
||||||
file = argv[1];
|
|
||||||
for (i = 2; i < argc; i++)
|
|
||||||
{
|
|
||||||
if (!strcmp(argv[i], "-head"))
|
|
||||||
// asked to only load header, not body/data
|
|
||||||
head_only = 1;
|
|
||||||
else if (!strcmp(argv[i], "-key"))
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
numonly = 1;
|
|
||||||
for (p = argv[i]; *p; p++)
|
|
||||||
{
|
|
||||||
if ((*p < '0') || (*p > '9'))
|
|
||||||
{
|
|
||||||
numonly = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (numonly) pos = atoll(argv[i]) * 1000000;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (!strcmp(argv[i], "-opt-scale-down-by"))
|
|
||||||
{ // not used by ps loader
|
|
||||||
i++;
|
|
||||||
// int scale_down = atoi(argv[i]);
|
|
||||||
}
|
|
||||||
else if (!strcmp(argv[i], "-opt-dpi"))
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (!strcmp(argv[i], "-opt-size"))
|
|
||||||
{ // not used by ps loader
|
|
||||||
i++;
|
|
||||||
size_w = atoi(argv[i]);
|
|
||||||
i++;
|
|
||||||
size_h = atoi(argv[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
timeout_init(10);
|
|
||||||
|
|
||||||
D("_gst_init_file\n");
|
|
||||||
|
|
||||||
if (!_gst_init(file))
|
|
||||||
return -1;
|
|
||||||
D("_gst_init done\n");
|
|
||||||
|
|
||||||
if ((pos >= 0) && (pos > duration)) return -1;
|
|
||||||
|
|
||||||
if (!head_only)
|
|
||||||
{
|
|
||||||
_gst_load_image(size_w, size_h, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
D("size...: %ix%i\n", width, height);
|
|
||||||
D("alpha..: 0\n");
|
|
||||||
|
|
||||||
printf("size %i %i\n", width, height);
|
|
||||||
printf("alpha 0\n");
|
|
||||||
|
|
||||||
if (!head_only)
|
|
||||||
{
|
|
||||||
if (shm_fd >= 0)
|
|
||||||
{
|
|
||||||
printf("shmfile %s\n", shmfile);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// could also to "tmpfile %s\n" like shmfile but just
|
|
||||||
// a mmaped tmp file on the system
|
|
||||||
printf("data\n");
|
|
||||||
fwrite(data, width * height * sizeof(DATA32), 1, stdout);
|
|
||||||
}
|
|
||||||
shm_free();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
printf("done\n");
|
|
||||||
|
|
||||||
_gst_shutdown();
|
|
||||||
fflush(stdout);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,278 +0,0 @@
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
#include <Eina.h>
|
|
||||||
|
|
||||||
#include "shmfile.h"
|
|
||||||
#include "timeout.h"
|
|
||||||
|
|
||||||
#define DATA32 unsigned int
|
|
||||||
|
|
||||||
//#define GST_DBG
|
|
||||||
|
|
||||||
#ifdef GST_DBG
|
|
||||||
#define D(fmt, args...) fprintf(stderr, fmt, ## args)
|
|
||||||
#else
|
|
||||||
#define D(fmt, args...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CAPS "video/x-raw-rgb,bpp=(int)32,depth=(int)32,endianness=(int)4321,red_mask=(int)0x0000ff00, green_mask=(int)0x00ff0000, blue_mask=(int)0xff000000"
|
|
||||||
|
|
||||||
static GstElement *pipeline = NULL;
|
|
||||||
static GstElement *sink = NULL;
|
|
||||||
static gint64 duration = -1;
|
|
||||||
|
|
||||||
int width = 0;
|
|
||||||
int height = 0;
|
|
||||||
void *data = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
static Eina_Bool
|
|
||||||
_gst_init(const char *filename)
|
|
||||||
{
|
|
||||||
GstPad *pad;
|
|
||||||
GstCaps *caps;
|
|
||||||
GstStructure *structure;
|
|
||||||
gchar *descr;
|
|
||||||
gchar *uri;
|
|
||||||
GError *error = NULL;
|
|
||||||
GstFormat format;
|
|
||||||
GstStateChangeReturn ret;
|
|
||||||
// int vidstr = 0;
|
|
||||||
|
|
||||||
if (!filename || !*filename)
|
|
||||||
return EINA_FALSE;
|
|
||||||
|
|
||||||
if (!gst_init_check(NULL, NULL, &error))
|
|
||||||
return EINA_FALSE;
|
|
||||||
|
|
||||||
if ((*filename == '/') || (*filename == '~'))
|
|
||||||
{
|
|
||||||
uri = g_filename_to_uri(filename, NULL, NULL);
|
|
||||||
if (!uri)
|
|
||||||
{
|
|
||||||
D("could not create new uri from %s", filename);
|
|
||||||
goto unref_pipeline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
uri = strdup(filename);
|
|
||||||
|
|
||||||
D("Setting file %s\n", uri);
|
|
||||||
|
|
||||||
descr = g_strdup_printf("uridecodebin uri=%s ! typefind ! ffmpegcolorspace ! "
|
|
||||||
" appsink name=sink caps=\"" CAPS "\"", uri);
|
|
||||||
pipeline = gst_parse_launch(descr, &error);
|
|
||||||
free(uri);
|
|
||||||
|
|
||||||
if (error != NULL)
|
|
||||||
{
|
|
||||||
D("could not construct pipeline: %s\n", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
goto gst_shutdown;
|
|
||||||
}
|
|
||||||
/* needs gst 1.0+
|
|
||||||
* also only works on playbin objects!!! this is a uridecodebin!
|
|
||||||
g_object_get(G_OBJECT(pipeline),
|
|
||||||
"n-video", &vidstr,
|
|
||||||
NULL);
|
|
||||||
if (vidstr <= 0)
|
|
||||||
{
|
|
||||||
D("no video stream\n");
|
|
||||||
goto gst_shutdown;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
|
|
||||||
|
|
||||||
ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
|
|
||||||
switch (ret)
|
|
||||||
{
|
|
||||||
case GST_STATE_CHANGE_FAILURE:
|
|
||||||
D("failed to play the file\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
case GST_STATE_CHANGE_NO_PREROLL:
|
|
||||||
D("live sources not supported yet\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = gst_element_get_state((pipeline), NULL, NULL, GST_CLOCK_TIME_NONE);
|
|
||||||
if (ret == GST_STATE_CHANGE_FAILURE)
|
|
||||||
{
|
|
||||||
D("could not complete pause\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
format = GST_FORMAT_TIME;
|
|
||||||
gst_element_query_duration (pipeline, &format, &duration);
|
|
||||||
if (duration == -1)
|
|
||||||
{
|
|
||||||
D("could not retrieve the duration, set it to 1s\n");
|
|
||||||
duration = 1 * GST_SECOND;
|
|
||||||
}
|
|
||||||
|
|
||||||
pad = gst_element_get_static_pad(sink, "sink");
|
|
||||||
if (!pad)
|
|
||||||
{
|
|
||||||
D("could not retrieve the sink pad\n");
|
|
||||||
goto unref_pipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
caps = gst_pad_get_negotiated_caps(pad);
|
|
||||||
if (!caps)
|
|
||||||
goto unref_pad;
|
|
||||||
|
|
||||||
structure = gst_caps_get_structure(caps, 0);
|
|
||||||
|
|
||||||
if (!gst_structure_get_int(structure, "width", &width))
|
|
||||||
goto unref_caps;
|
|
||||||
if (!gst_structure_get_int(structure, "height", &height))
|
|
||||||
goto unref_caps;
|
|
||||||
|
|
||||||
gst_caps_unref(caps);
|
|
||||||
gst_object_unref(pad);
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
|
|
||||||
unref_caps:
|
|
||||||
gst_caps_unref(caps);
|
|
||||||
unref_pad:
|
|
||||||
gst_object_unref(pad);
|
|
||||||
unref_pipeline:
|
|
||||||
gst_element_set_state (pipeline, GST_STATE_NULL);
|
|
||||||
gst_object_unref(pipeline);
|
|
||||||
gst_shutdown:
|
|
||||||
gst_deinit();
|
|
||||||
|
|
||||||
return EINA_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_gst_shutdown()
|
|
||||||
{
|
|
||||||
gst_element_set_state (pipeline, GST_STATE_NULL);
|
|
||||||
gst_object_unref(pipeline);
|
|
||||||
gst_deinit();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_gst_load_image(int size_w EINA_UNUSED, int size_h EINA_UNUSED, double pos)
|
|
||||||
{
|
|
||||||
GstBuffer *buffer;
|
|
||||||
|
|
||||||
D("load image\n");
|
|
||||||
if (pos >= 0.0)
|
|
||||||
gst_element_seek_simple(pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
|
|
||||||
pos * 1000000000.0);
|
|
||||||
else
|
|
||||||
gst_element_seek_simple(pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
|
|
||||||
duration / 2);
|
|
||||||
g_signal_emit_by_name(sink, "pull-preroll", &buffer, NULL);
|
|
||||||
D("load image : %p %d\n", GST_BUFFER_DATA(buffer), GST_BUFFER_SIZE(buffer));
|
|
||||||
|
|
||||||
shm_alloc(width * height * sizeof(DATA32));
|
|
||||||
if (!shm_addr) return;
|
|
||||||
data = shm_addr;
|
|
||||||
|
|
||||||
memcpy(data, GST_BUFFER_DATA(buffer), GST_BUFFER_SIZE(buffer));
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
char *file, *p;
|
|
||||||
int i, numonly;
|
|
||||||
int size_w = 0, size_h = 0;
|
|
||||||
int head_only = 0;
|
|
||||||
long long pos = -1.0;
|
|
||||||
|
|
||||||
if (argc < 2) return -1;
|
|
||||||
// file is ALWAYS first arg, other options come after
|
|
||||||
file = argv[1];
|
|
||||||
for (i = 2; i < argc; i++)
|
|
||||||
{
|
|
||||||
if (!strcmp(argv[i], "-head"))
|
|
||||||
// asked to only load header, not body/data
|
|
||||||
head_only = 1;
|
|
||||||
else if (!strcmp(argv[i], "-key"))
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
numonly = 1;
|
|
||||||
for (p = argv[i]; *p; p++)
|
|
||||||
{
|
|
||||||
if ((!*p < '0') || (*p > 9))
|
|
||||||
{
|
|
||||||
numonly = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (numonly) pos = (double)(atoll(argv[i])) / 1000.0;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (!strcmp(argv[i], "-opt-scale-down-by"))
|
|
||||||
{ // not used by ps loader
|
|
||||||
i++;
|
|
||||||
// int scale_down = atoi(argv[i]);
|
|
||||||
}
|
|
||||||
else if (!strcmp(argv[i], "-opt-dpi"))
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (!strcmp(argv[i], "-opt-size"))
|
|
||||||
{ // not used by ps loader
|
|
||||||
i++;
|
|
||||||
size_w = atoi(argv[i]);
|
|
||||||
i++;
|
|
||||||
size_h = atoi(argv[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
timeout_init(10);
|
|
||||||
|
|
||||||
D("_gst_init_file\n");
|
|
||||||
|
|
||||||
if (!_gst_init(file))
|
|
||||||
return -1;
|
|
||||||
D("_gst_init done\n");
|
|
||||||
|
|
||||||
if (!head_only)
|
|
||||||
{
|
|
||||||
_gst_load_image(size_w, size_h, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
D("size...: %ix%i\n", width, height);
|
|
||||||
D("alpha..: 0\n");
|
|
||||||
|
|
||||||
printf("size %i %i\n", width, height);
|
|
||||||
printf("alpha 0\n");
|
|
||||||
|
|
||||||
if (!head_only)
|
|
||||||
{
|
|
||||||
if (shm_fd >= 0)
|
|
||||||
{
|
|
||||||
printf("shmfile %s\n", shmfile);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// could also to "tmpfile %s\n" like shmfile but just
|
|
||||||
// a mmaped tmp file on the system
|
|
||||||
printf("data\n");
|
|
||||||
fwrite(data, width * height * sizeof(DATA32), 1, stdout);
|
|
||||||
}
|
|
||||||
shm_free();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
printf("done\n");
|
|
||||||
|
|
||||||
_gst_shutdown();
|
|
||||||
fflush(stdout);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
-I$(top_srcdir)/src \
|
|
||||||
-I$(top_srcdir)/src/bin \
|
|
||||||
-I$(top_srcdir)/src/bin/common \
|
|
||||||
-I$(top_srcdir)/src/bin/pdf \
|
|
||||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
|
||||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
|
||||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
|
||||||
@EINA_CFLAGS@ \
|
|
||||||
@POPPLER_CFLAGS@
|
|
||||||
|
|
||||||
EXTRA_DIST = evas_generic_pdf_loader.libreoffice
|
|
||||||
|
|
||||||
bin_SCRIPTS = evas_generic_pdf_loader.libreoffice
|
|
||||||
bin_PROGRAMS = evas_image_loader.pdf
|
|
||||||
bindir = $(libdir)/evas/utils
|
|
||||||
|
|
||||||
evas_image_loader_pdf_SOURCES = \
|
|
||||||
main.cpp \
|
|
||||||
$(top_srcdir)/src/bin/common/shmfile.c \
|
|
||||||
$(top_srcdir)/src/bin/common/timeout.c
|
|
||||||
evas_image_loader_pdf_CFLAGS =
|
|
||||||
evas_image_loader_pdf_LDADD = @POPPLER_LIBS@ @EINA_LIBS@ @SHM_OPEN_LIBS@
|
|
||||||
evas_image_loader_pdf_LDFLAGS =
|
|
||||||
|
|
||||||
install-exec-hook:
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ppt
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.pptx
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.odp
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.xls
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.xlsx
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ods
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.doc
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.docx
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.odt
|
|
||||||
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rtf
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.ppt
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.pptx
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.odp
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.xls
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.xlsx
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.ods
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.doc
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.docx
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.odt
|
|
||||||
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.rtf
|
|
|
@ -1,24 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
-I$(top_srcdir)/src \
|
|
||||||
-I$(top_srcdir)/src/bin \
|
|
||||||
-I$(top_srcdir)/src/bin/common \
|
|
||||||
-I$(top_srcdir)/src/bin/ps \
|
|
||||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
|
||||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
|
||||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
|
||||||
@EINA_CFLAGS@ \
|
|
||||||
@SPECTRE_CFLAGS@
|
|
||||||
|
|
||||||
bin_PROGRAMS = evas_image_loader.ps
|
|
||||||
bindir = $(libdir)/evas/utils
|
|
||||||
|
|
||||||
evas_image_loader_ps_SOURCES = \
|
|
||||||
main.c \
|
|
||||||
$(top_srcdir)/src/bin/common/shmfile.c \
|
|
||||||
$(top_srcdir)/src/bin/common/timeout.c
|
|
||||||
evas_image_loader_ps_CFLAGS =
|
|
||||||
evas_image_loader_ps_LDADD = @SPECTRE_LIBS@ @EINA_LIBS@ @SHM_OPEN_LIBS@
|
|
||||||
evas_image_loader_ps_LDFLAGS =
|
|
|
@ -1,44 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
-I$(top_srcdir)/src \
|
|
||||||
-I$(top_srcdir)/src/bin \
|
|
||||||
-I$(top_srcdir)/src/bin/common \
|
|
||||||
-I$(top_srcdir)/src/bin/raw \
|
|
||||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
|
||||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
|
||||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
|
||||||
@EINA_CFLAGS@
|
|
||||||
|
|
||||||
bin_PROGRAMS = evas_image_loader.raw
|
|
||||||
bindir = $(libdir)/evas/utils
|
|
||||||
|
|
||||||
evas_image_loader_raw_SOURCES = \
|
|
||||||
main.c \
|
|
||||||
$(top_srcdir)/src/bin/common/shmfile.c \
|
|
||||||
$(top_srcdir)/src/bin/common/timeout.c
|
|
||||||
evas_image_loader_raw_CFLAGS = @LIBRAW_CFLAGS@
|
|
||||||
evas_image_loader_raw_LDADD = @SHM_OPEN_LIBS@ @LIBRAW_LIBS@ -lm
|
|
||||||
evas_image_loader_raw_LDFLAGS =
|
|
||||||
|
|
||||||
install-exec-hook:
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.arw
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.cr2
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.crw
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.dcr
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.dng
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.k25
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.kdc
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.erf
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mrw
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nef
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nrf
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nrw
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.orf
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rw2
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.pef
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.raf
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.sr2
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.srf
|
|
||||||
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.x3f
|
|
|
@ -1,28 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
-I$(top_srcdir)/src \
|
|
||||||
-I$(top_srcdir)/src/bin \
|
|
||||||
-I$(top_srcdir)/src/bin/common \
|
|
||||||
-I$(top_srcdir)/src/bin/svg \
|
|
||||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
|
||||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
|
||||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
|
||||||
@EINA_CFLAGS@
|
|
||||||
|
|
||||||
bin_PROGRAMS = evas_image_loader.svg
|
|
||||||
bindir = $(libdir)/evas/utils
|
|
||||||
|
|
||||||
evas_image_loader_svg_SOURCES = \
|
|
||||||
main.c \
|
|
||||||
$(top_srcdir)/src/bin/common/shmfile.c \
|
|
||||||
$(top_srcdir)/src/bin/common/timeout.c
|
|
||||||
evas_image_loader_svg_CFLAGS = @SVG_CFLAGS@
|
|
||||||
evas_image_loader_svg_LDADD = @SVG_LIBS@ @SHM_OPEN_LIBS@ -lm
|
|
||||||
evas_image_loader_svg_LDFLAGS =
|
|
||||||
|
|
||||||
|
|
||||||
install-exec-hook:
|
|
||||||
ln -sf evas_image_loader.svg $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.svgz
|
|
||||||
ln -sf evas_image_loader.svg $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.svg.gz
|
|
|
@ -1,26 +0,0 @@
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
-I$(top_srcdir)/src \
|
|
||||||
-I$(top_srcdir)/src/bin \
|
|
||||||
-I$(top_srcdir)/src/bin/common \
|
|
||||||
-I$(top_srcdir)/src/bin/xcf \
|
|
||||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
|
||||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
|
||||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
|
||||||
@EINA_CFLAGS@
|
|
||||||
|
|
||||||
bin_PROGRAMS = evas_image_loader.xcf
|
|
||||||
bindir = $(libdir)/evas/utils
|
|
||||||
|
|
||||||
evas_image_loader_xcf_SOURCES = \
|
|
||||||
main.c pixelfuncs.c common.h \
|
|
||||||
$(top_srcdir)/src/bin/common/shmfile.c \
|
|
||||||
$(top_srcdir)/src/bin/common/timeout.c
|
|
||||||
evas_image_loader_xcf_CFLAGS = @EINA_CFLAGS@
|
|
||||||
evas_image_loader_xcf_LDADD = @EINA_LIBS@ -lz -lm @SHM_OPEN_LIBS@
|
|
||||||
evas_image_loader_xcf_LDFLAGS =
|
|
||||||
|
|
||||||
install-exec-hook:
|
|
||||||
ln -sf evas_image_loader.xcf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.xcf.gz
|
|
|
@ -2377,3 +2377,156 @@ if HAVE_CXX11
|
||||||
evas_eolian_cxx_hh = $(evas_eolian_pub_files:%.eo=%.eo.hh)
|
evas_eolian_cxx_hh = $(evas_eolian_pub_files:%.eo=%.eo.hh)
|
||||||
evas_eolian_cxx_impl = $(evas_eolian_pub_files:%.eo=%.eo.impl.hh)
|
evas_eolian_cxx_impl = $(evas_eolian_pub_files:%.eo=%.eo.impl.hh)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST += \
|
||||||
|
generic/evas/common/shmfile.c \
|
||||||
|
generic/evas/common/shmfile.h \
|
||||||
|
generic/evas/common/timeout.c \
|
||||||
|
generic/evas/common/timeout.h
|
||||||
|
|
||||||
|
evasgenericloadersdir = \
|
||||||
|
$(libdir)/evas/utils
|
||||||
|
|
||||||
|
evasgenericloaders_PROGRAMS =
|
||||||
|
evasgenericloaders_SCRIPT =
|
||||||
|
|
||||||
|
### Libreoffice converter to pdf
|
||||||
|
EXTRA_DIST += generic/evas/pdf/evas_generic_pdf_loader.libreoffice
|
||||||
|
|
||||||
|
if HAVE_POPPLER
|
||||||
|
|
||||||
|
evasgenericloaders_SCRIPT += generic/evas/pdf/evas_generic_pdf_loader.libreoffice
|
||||||
|
evasgenericloaders_PROGRAMS += generic/evas/pdf/evas_image_loader.pdf
|
||||||
|
|
||||||
|
generic_evas_pdf_evas_image_loader_pdf_SOURCES = \
|
||||||
|
generic/evas/pdf/main.cpp \
|
||||||
|
generic/evas/common/shmfile.c \
|
||||||
|
generic/evas/common/timeout.c
|
||||||
|
generic_evas_pdf_evas_image_loader_pdf_CFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/lib/efl \
|
||||||
|
-I$(top_srcdir)/src/lib/eina \
|
||||||
|
-I$(top_srcdir)/src/generic/evas/common \
|
||||||
|
@POPPLER_CFLAGS@
|
||||||
|
generic_evas_pdf_evas_image_loader_pdf_CXXFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/lib/efl \
|
||||||
|
-I$(top_srcdir)/src/lib/eina \
|
||||||
|
-I$(top_srcdir)/src/generic/evas/common \
|
||||||
|
@POPPLER_CFLAGS@
|
||||||
|
generic_evas_pdf_evas_image_loader_pdf_LDADD = @POPPLER_LIBS@ @USE_EINA_INTERNAL_LIBS@ @SHM_LIBS@
|
||||||
|
|
||||||
|
EFL_INSTALL_EXEC_HOOK += \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ppt; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.pptx; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.odp; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.xls; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.xlsx; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.ods; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.doc; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.docx; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.odt; \
|
||||||
|
ln -sf evas_image_loader.pdf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rtf; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.ppt; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.pptx; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.odp; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.xls; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.xlsx; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.ods; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.doc; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.docx; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.odt; \
|
||||||
|
ln -sf evas_generic_pdf_loader.libreoffice $(DESTDIR)$(libdir)/evas/utils/evas_generic_pdf_loader.rtf;
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if HAVE_SPECTRE
|
||||||
|
|
||||||
|
evasgenericloaders_PROGRAMS += generic/evas/ps/evas_image_loader.ps
|
||||||
|
|
||||||
|
generic_evas_ps_evas_image_loader_ps_SOURCES = \
|
||||||
|
generic/evas/ps/main.c \
|
||||||
|
generic/evas/common/shmfile.c \
|
||||||
|
generic/evas/common/timeout.c
|
||||||
|
generic_evas_ps_evas_image_loader_ps_LDADD = @SPECTRE_LIBS@ @USE_EINA_INTERNAL_LIBS@ @SHM_LIBS@
|
||||||
|
generic_evas_ps_evas_image_loader_ps_CFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/lib/efl \
|
||||||
|
-I$(top_srcdir)/src/lib/eina \
|
||||||
|
-I$(top_srcdir)/src/generic/evas/common
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if HAVE_LIBRAW
|
||||||
|
|
||||||
|
evasgenericloaders_PROGRAMS += generic/evas/raw/evas_image_loader.raw
|
||||||
|
|
||||||
|
generic_evas_raw_evas_image_loader_raw_SOURCES = \
|
||||||
|
generic/evas/raw/main.c \
|
||||||
|
generic/evas/common/shmfile.c \
|
||||||
|
generic/evas/common/timeout.c
|
||||||
|
generic_evas_raw_evas_image_loader_raw_LDADD = @SHM_LIBS@ @USE_EINA_INTERNAL_LIBS@ @LIBRAW_LIBS@ -lm
|
||||||
|
generic_evas_raw_evas_image_loader_raw_CFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/lib/efl \
|
||||||
|
-I$(top_srcdir)/src/lib/eina \
|
||||||
|
-I$(top_srcdir)/src/generic/evas/common \
|
||||||
|
@LIBRAW_CFLAGS@
|
||||||
|
|
||||||
|
EFL_INSTALL_EXEC_HOOK += \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.arw; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.cr2; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.crw; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.dcr; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.dng; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.k25; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.kdc; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.erf; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.mrw; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nef; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nrf; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.nrw; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.orf; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.rw2; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.pef; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.raf; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.sr2; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.srf; \
|
||||||
|
ln -sf evas_image_loader.raw $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.x3f;
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if HAVE_RSVG
|
||||||
|
|
||||||
|
evasgenericloaders_PROGRAMS += generic/evas/svg/evas_image_loader.svg
|
||||||
|
|
||||||
|
generic_evas_svg_evas_image_loader_svg_SOURCES = \
|
||||||
|
generic/evas/svg/main.c \
|
||||||
|
generic/evas/common/shmfile.c \
|
||||||
|
generic/evas/common/timeout.c
|
||||||
|
generic_evas_svg_evas_image_loader_svg_CFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/lib/efl \
|
||||||
|
-I$(top_srcdir)/src/lib/eina \
|
||||||
|
-I$(top_srcdir)/src/generic/evas/common \
|
||||||
|
@RSVG_CFLAGS@
|
||||||
|
generic_evas_svg_evas_image_loader_svg_LDADD = @RSVG_LIBS@ @USE_EINA_INTERNAL_LIBS@ @SHM_LIBS@ -lm
|
||||||
|
|
||||||
|
EFL_INSTALL_EXEC_HOOK += \
|
||||||
|
ln -sf evas_image_loader.svg $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.svgz; \
|
||||||
|
ln -sf evas_image_loader.svg $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.svg.gz;
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST += generic/evas/xcf/common.h
|
||||||
|
|
||||||
|
evasgenericloaders_PROGRAMS += generic/evas/xcf/evas_image_loader.xcf
|
||||||
|
|
||||||
|
generic_evas_xcf_evas_image_loader_xcf_SOURCES = \
|
||||||
|
generic/evas/xcf/main.c \
|
||||||
|
generic/evas/xcf/pixelfuncs.c \
|
||||||
|
generic/evas/common/shmfile.c \
|
||||||
|
generic/evas/common/timeout.c
|
||||||
|
generic_evas_xcf_evas_image_loader_xcf_CFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/lib/efl \
|
||||||
|
-I$(top_srcdir)/src/lib/eina \
|
||||||
|
-I$(top_srcdir)/src/generic/evas/common
|
||||||
|
generic_evas_xcf_evas_image_loader_xcf_LDADD = @USE_EINA_INTERNAL_LIBS@ @SHM_LIBS@ -lm -lz
|
||||||
|
|
||||||
|
EFL_INSTALL_EXEC_HOOK += \
|
||||||
|
ln -sf evas_image_loader.xcf $(DESTDIR)$(libdir)/evas/utils/evas_image_loader.xcf.gz;
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
/emotion/vlc/vlc
|
||||||
|
/evas/pdf/evas_image_loader.pdf
|
||||||
|
/evas/ps/evas_image_loader.ps
|
||||||
|
/evas/raw/evas_image_loader.raw
|
||||||
|
/evas/xcf/evas_image_loader.xcf
|
Loading…
Reference in New Issue