Added epdf plugin.
Err... maybe I forgot to svn add some files in my previous commit... SVN revision: 40277
This commit is contained in:
parent
4aea12e286
commit
939afcb3ea
|
@ -60,6 +60,17 @@ if $USE_MODULE_EMOTION ; then
|
||||||
requirement_ethumb="$requirement_ethumb emotion"
|
requirement_ethumb="$requirement_ethumb emotion"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(HAVE_EPDF, false)
|
||||||
|
define([CHECK_MODULE_EPDF],
|
||||||
|
[
|
||||||
|
AC_ETH_CHECK_PKG(EPDF, epdf, [], [EPDF=false])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_ETH_OPTIONAL_MODULE([epdf], true, [CHECK_MODULE_EPDF])
|
||||||
|
if $USE_MODULE_EPDF ; then
|
||||||
|
requirement_ethumb="$requirement_ethumb epdf"
|
||||||
|
fi
|
||||||
|
|
||||||
AC_SUBST(requirement_ethumb)
|
AC_SUBST(requirement_ethumb)
|
||||||
|
|
||||||
AC_OUTPUT([
|
AC_OUTPUT([
|
||||||
|
@ -70,6 +81,7 @@ src/bin/Makefile
|
||||||
src/lib/Makefile
|
src/lib/Makefile
|
||||||
src/plugins/Makefile
|
src/plugins/Makefile
|
||||||
src/plugins/emotion/Makefile
|
src/plugins/emotion/Makefile
|
||||||
|
src/plugins/epdf/Makefile
|
||||||
data/Makefile
|
data/Makefile
|
||||||
data/frames/Makefile
|
data/frames/Makefile
|
||||||
m4/Makefile
|
m4/Makefile
|
||||||
|
|
|
@ -118,6 +118,8 @@ const Ecore_Getopt optdesc = {
|
||||||
('k', "key", "key inside eet file to read image from."),
|
('k', "key", "key inside eet file to read image from."),
|
||||||
ECORE_GETOPT_STORE_DOUBLE
|
ECORE_GETOPT_STORE_DOUBLE
|
||||||
('v', "video_time", "time of video frame to use as thumbnail."),
|
('v', "video_time", "time of video frame to use as thumbnail."),
|
||||||
|
ECORE_GETOPT_STORE_INT
|
||||||
|
('p', "document_page", "document page to use as thumbnail."),
|
||||||
ECORE_GETOPT_LICENSE('L', "license"),
|
ECORE_GETOPT_LICENSE('L', "license"),
|
||||||
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
|
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
|
||||||
ECORE_GETOPT_VERSION('V', "version"),
|
ECORE_GETOPT_VERSION('V', "version"),
|
||||||
|
@ -149,6 +151,7 @@ main(int argc, char *argv[])
|
||||||
const char *thumb_path = NULL;
|
const char *thumb_path = NULL;
|
||||||
const char *thumb_key = NULL;
|
const char *thumb_key = NULL;
|
||||||
double video_time = 0;
|
double video_time = 0;
|
||||||
|
int page = 0;
|
||||||
int arg_index;
|
int arg_index;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -165,6 +168,7 @@ main(int argc, char *argv[])
|
||||||
ECORE_GETOPT_VALUE_PTR_CAST(frame),
|
ECORE_GETOPT_VALUE_PTR_CAST(frame),
|
||||||
ECORE_GETOPT_VALUE_STR(src_key),
|
ECORE_GETOPT_VALUE_STR(src_key),
|
||||||
ECORE_GETOPT_VALUE_DOUBLE(video_time),
|
ECORE_GETOPT_VALUE_DOUBLE(video_time),
|
||||||
|
ECORE_GETOPT_VALUE_INT(page),
|
||||||
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
||||||
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
||||||
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
||||||
|
@ -212,6 +216,8 @@ main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
if (video_time > 0)
|
if (video_time > 0)
|
||||||
ethumb_video_time_set(e, video_time);
|
ethumb_video_time_set(e, video_time);
|
||||||
|
if (page > 0)
|
||||||
|
ethumb_document_page_set(e, page);
|
||||||
|
|
||||||
if (r && arg_index < argc)
|
if (r && arg_index < argc)
|
||||||
ef = ethumb_file_new(e, argv[arg_index++], src_key);
|
ef = ethumb_file_new(e, argv[arg_index++], src_key);
|
||||||
|
@ -226,7 +232,7 @@ main(int argc, char *argv[])
|
||||||
r = ethumb_file_generate(ef, _finished_thumb, NULL);
|
r = ethumb_file_generate(ef, _finished_thumb, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r)
|
if (r && !quit_option)
|
||||||
ecore_main_loop_begin();
|
ecore_main_loop_begin();
|
||||||
|
|
||||||
ethumb_file_free(ef);
|
ethumb_file_free(ef);
|
||||||
|
|
|
@ -500,6 +500,14 @@ ethumb_video_time_set(Ethumb *e, float time)
|
||||||
e->video.time = time;
|
e->video.time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ethumb_document_page_set(Ethumb *e, int page)
|
||||||
|
{
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN(e);
|
||||||
|
|
||||||
|
e->document.page = page;
|
||||||
|
}
|
||||||
|
|
||||||
EAPI Ethumb_File *
|
EAPI Ethumb_File *
|
||||||
ethumb_file_new(Ethumb *e, const char *path, const char *key)
|
ethumb_file_new(Ethumb *e, const char *path, const char *key)
|
||||||
{
|
{
|
||||||
|
|
|
@ -89,11 +89,14 @@ struct _Ethumb
|
||||||
{
|
{
|
||||||
double time;
|
double time;
|
||||||
} video;
|
} video;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
int page;
|
||||||
|
} document;
|
||||||
Ethumb_Frame *frame;
|
Ethumb_Frame *frame;
|
||||||
Ecore_Evas *ee, *sub_ee;
|
Ecore_Evas *ee, *sub_ee;
|
||||||
Evas *e, *sub_e;
|
Evas *e, *sub_e;
|
||||||
Evas_Object *o, *img;
|
Evas_Object *o, *img;
|
||||||
Evas_Object *plugin_img;
|
|
||||||
Ecore_Idler *finished_idler;
|
Ecore_Idler *finished_idler;
|
||||||
ethumb_generate_callback_t finished_cb;
|
ethumb_generate_callback_t finished_cb;
|
||||||
void *cb_data;
|
void *cb_data;
|
||||||
|
@ -139,6 +142,7 @@ EAPI void ethumb_thumb_category_set(Ethumb *e, const char *category) EINA_ARG_NO
|
||||||
EAPI const char * ethumb_thumb_category_get(Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
|
EAPI const char * ethumb_thumb_category_get(Ethumb *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
|
||||||
|
|
||||||
EAPI void ethumb_video_time_set(Ethumb *e, float time) EINA_ARG_NONNULL(1);
|
EAPI void ethumb_video_time_set(Ethumb *e, float time) EINA_ARG_NONNULL(1);
|
||||||
|
EAPI void ethumb_document_page_set(Ethumb *e, int page) EINA_ARG_NONNULL(1);
|
||||||
|
|
||||||
EAPI Ethumb_File * ethumb_file_new(Ethumb *e, const char *path, const char *key) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
|
EAPI Ethumb_File * ethumb_file_new(Ethumb *e, const char *path, const char *key) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
|
||||||
EAPI void ethumb_file_free(Ethumb_File *ef);
|
EAPI void ethumb_file_free(Ethumb_File *ef);
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef _ETHUMB_PLUGIN_H_
|
||||||
|
#define _ETHUMB_PLUGIN_H_
|
||||||
|
|
||||||
|
#include <Ethumb.h>
|
||||||
|
#include <Eina.h>
|
||||||
|
#include <Evas.h>
|
||||||
|
|
||||||
|
typedef struct _Ethumb_Plugin Ethumb_Plugin;
|
||||||
|
|
||||||
|
struct _Ethumb_Plugin
|
||||||
|
{
|
||||||
|
const char **extensions;
|
||||||
|
int (*generate_thumb)(Ethumb_File *);
|
||||||
|
void (*shutdown)(Ethumb_Plugin *);
|
||||||
|
};
|
||||||
|
|
||||||
|
void ethumb_calculate_aspect(Ethumb *e, int iw, int ih, int *w, int *h);
|
||||||
|
void ethumb_calculate_fill(Ethumb *e, int iw, int ih, int *fx, int *fy, int *fw, int *fh);
|
||||||
|
int ethumb_plugin_image_resize(Ethumb_File *ef, int w, int h);
|
||||||
|
int ethumb_image_save(Ethumb_File *ef);
|
||||||
|
void ethumb_finished_callback_call(Ethumb_File *ef);
|
||||||
|
|
||||||
|
#endif /* _ETHUMB_PLUGIN_H_ */
|
|
@ -5,7 +5,7 @@ AM_CPPFLAGS = \
|
||||||
-I$(top_builddir) \
|
-I$(top_builddir) \
|
||||||
@EVAS_CFLAGS@ @ECORE_EVAS_CFLAGS@ @ECORE_FILE_CFLAGS@ @EDJE_CFLAGS@
|
@EVAS_CFLAGS@ @ECORE_EVAS_CFLAGS@ @ECORE_FILE_CFLAGS@ @EDJE_CFLAGS@
|
||||||
|
|
||||||
include_HEADERS = Ethumb.h
|
include_HEADERS = Ethumb.h Ethumb_Plugin.h
|
||||||
noinst_HEADERS = md5.h
|
noinst_HEADERS = md5.h
|
||||||
|
|
||||||
lib_LTLIBRARIES = libethumb.la
|
lib_LTLIBRARIES = libethumb.la
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
SUBDIRS =
|
||||||
|
|
||||||
|
if USE_MODULE_EMOTION
|
||||||
|
SUBDIRS += emotion
|
||||||
|
endif
|
||||||
|
|
||||||
|
if USE_MODULE_EMOTION
|
||||||
|
SUBDIRS += epdf
|
||||||
|
endif
|
||||||
|
|
||||||
|
DIST_SUBDIRS = \
|
||||||
|
emotion \
|
||||||
|
epdf
|
|
@ -0,0 +1,12 @@
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/plugins/emotion \
|
||||||
|
@EVAS_CFLAGS@ @EINA_CFLAGS@ @EMOTION_CFLAGS@ @ECORE_CFLAGS@
|
||||||
|
|
||||||
|
pkgdir = $(pluginsdir)
|
||||||
|
pkg_LTLIBRARIES = emotion.la
|
||||||
|
emotion_la_SOURCES = emotion.c
|
||||||
|
emotion_la_DEPENDENCIES = $(top_builddir)/config.h
|
||||||
|
emotion_la_LIBADD = $(top_builddir)/src/lib/libethumb.la \
|
||||||
|
@EVAS_LIBS@ @EINA_LIBS@ @EMOTION_LIBS@ @ECORE_LIBS@
|
||||||
|
emotion_la_LDFLAGS = -module -avoid-version
|
|
@ -0,0 +1,93 @@
|
||||||
|
#include "Ethumb.h"
|
||||||
|
#include "Ethumb_Plugin.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <Eina.h>
|
||||||
|
#include <Evas.h>
|
||||||
|
#include <Emotion.h>
|
||||||
|
#include <Ecore.h>
|
||||||
|
|
||||||
|
struct cb_data {
|
||||||
|
Ethumb_File *ef;
|
||||||
|
ethumb_generate_callback_t finished_cb;
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
static Evas_Object *_emotion = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_shutdown(Ethumb_Plugin *plugin)
|
||||||
|
{
|
||||||
|
ecore_shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_frame_decoded_cb(void *data, Evas_Object *o, void *event_info)
|
||||||
|
{
|
||||||
|
Ethumb_File *ef = data;
|
||||||
|
Ethumb *e = ef->ethumb;
|
||||||
|
Evas_Coord ww, hh;
|
||||||
|
Evas_Coord mw, mh;
|
||||||
|
|
||||||
|
emotion_object_size_get(o, &mw, &mh);
|
||||||
|
ethumb_calculate_aspect(e, mw, mh, &ww, &hh);
|
||||||
|
ethumb_plugin_image_resize(ef, ww, hh);
|
||||||
|
|
||||||
|
evas_object_resize(o, ww, hh);
|
||||||
|
evas_object_move(o, 0, 0);
|
||||||
|
|
||||||
|
ethumb_image_save(ef);
|
||||||
|
|
||||||
|
evas_object_smart_callback_del(o, "frame_decode", _frame_decoded_cb);
|
||||||
|
emotion_object_play_set(o, 0);
|
||||||
|
evas_object_del(o);
|
||||||
|
ethumb_finished_callback_call(ef);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_generate_thumb(Ethumb_File *ef)
|
||||||
|
{
|
||||||
|
Ethumb *e = ef->ethumb;
|
||||||
|
Evas_Object *o;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
o = emotion_object_add(e->sub_e);
|
||||||
|
r = emotion_object_init(o, "xine");
|
||||||
|
if (!r)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ERROR: could not start emotion using gstreamer"
|
||||||
|
" plugin.\n");
|
||||||
|
evas_object_del(o);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
emotion_object_file_set(o, ef->src_path);
|
||||||
|
emotion_object_position_set(o, e->video.time);
|
||||||
|
emotion_object_play_set(o, 1);
|
||||||
|
|
||||||
|
evas_object_smart_callback_add(o, "frame_decode", _frame_decoded_cb, ef);
|
||||||
|
|
||||||
|
evas_object_show(o);
|
||||||
|
|
||||||
|
_emotion = o;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ethumb_Plugin *
|
||||||
|
ethumb_plugin_init(void)
|
||||||
|
{
|
||||||
|
static const char *extensions[] = { "avi", NULL };
|
||||||
|
static Ethumb_Plugin plugin =
|
||||||
|
{
|
||||||
|
extensions,
|
||||||
|
_generate_thumb,
|
||||||
|
_shutdown
|
||||||
|
};
|
||||||
|
|
||||||
|
ecore_init();
|
||||||
|
|
||||||
|
return &plugin;
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/plugins/epdf \
|
||||||
|
@EINA_CFLAGS@ @EVAS_CFLAGS@ @ECORE_CFLAGS@ @EPDF_CFLAGS@
|
||||||
|
|
||||||
|
pkgdir = $(pluginsdir)
|
||||||
|
pkg_LTLIBRARIES = epdf.la
|
||||||
|
epdf_la_SOURCES = epdf.c
|
||||||
|
epdf_la_DEPENDENCIES = $(top_builddir)/config.h
|
||||||
|
epdf_la_LIBADD = $(top_builddir)/src/lib/libethumb.la \
|
||||||
|
@EINA_LIBS@ @EVAS_LIBS@ @ECORE_LIBS@ @EPDF_LIBS@
|
||||||
|
epdf_la_LDFLAGS = -module -avoid-version
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "Ethumb.h"
|
||||||
|
#include "Ethumb_Plugin.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <Evas.h>
|
||||||
|
#include <Epdf.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
_shutdown(Ethumb_Plugin *plugin)
|
||||||
|
{
|
||||||
|
epdf_shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_generate_thumb(Ethumb_File *ef)
|
||||||
|
{
|
||||||
|
Ethumb *e = ef->ethumb;
|
||||||
|
Epdf_Document *document;
|
||||||
|
Epdf_Page *page;
|
||||||
|
Evas_Object *o;
|
||||||
|
int w, h, ww, hh;
|
||||||
|
int fx, fy, fw, fh;
|
||||||
|
int npages;
|
||||||
|
|
||||||
|
document = epdf_document_new(ef->src_path);
|
||||||
|
if (!document)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ERROR: could not read document: %s\n", ef->src_path);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
page = epdf_page_new(document);
|
||||||
|
if (!page)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ERROR: could not read document: %s\n", ef->src_path);
|
||||||
|
epdf_document_delete(document);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
npages = epdf_document_page_count_get(document);
|
||||||
|
if (e->document.page < npages)
|
||||||
|
epdf_page_page_set(page, e->document.page);
|
||||||
|
epdf_page_size_get(page, &w, &h);
|
||||||
|
ethumb_calculate_aspect(e, w, h, &ww, &hh);
|
||||||
|
ethumb_plugin_image_resize(ef, ww, hh);
|
||||||
|
|
||||||
|
o = evas_object_image_add(e->sub_e);
|
||||||
|
epdf_page_render(page, o);
|
||||||
|
evas_object_resize(o, ww, hh);
|
||||||
|
evas_object_move(o, 0, 0);
|
||||||
|
|
||||||
|
ethumb_calculate_fill(e, w, h, &fx, &fy, &fw, &fh);
|
||||||
|
evas_object_image_fill_set(o, fx, fy, fw, fh);
|
||||||
|
|
||||||
|
evas_object_show(o);
|
||||||
|
ethumb_image_save(ef);
|
||||||
|
|
||||||
|
evas_object_del(o);
|
||||||
|
epdf_page_delete(page);
|
||||||
|
epdf_document_delete(document);
|
||||||
|
|
||||||
|
ethumb_finished_callback_call(ef);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ethumb_Plugin *
|
||||||
|
ethumb_plugin_init(void)
|
||||||
|
{
|
||||||
|
static const char *extensions[] = { "pdf", NULL };
|
||||||
|
static Ethumb_Plugin plugin =
|
||||||
|
{
|
||||||
|
extensions,
|
||||||
|
_generate_thumb,
|
||||||
|
_shutdown
|
||||||
|
};
|
||||||
|
|
||||||
|
epdf_init();
|
||||||
|
|
||||||
|
return &plugin;
|
||||||
|
}
|
Loading…
Reference in New Issue