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>
|
||||
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
|
||||
-----
|
||||
|
||||
|
|
2
COPYING
2
COPYING
|
@ -34,6 +34,8 @@ ethumb: licenses/COPYING.LGPL
|
|||
eolian: licenses/COPYING.BSD
|
||||
elua: licenses/COPYING.BSD
|
||||
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
|
||||
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], [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])
|
||||
#### 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_impl = $(evas_eolian_pub_files:%.eo=%.eo.impl.hh)
|
||||
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