summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-04-23 19:26:14 +0200
committerGravatar waker <wakeroid@gmail.com>2011-04-23 19:26:14 +0200
commit09abe70df1fb7ae8d8ae1218ae477d9b413949a6 (patch)
treee42722a05a0f533a23ba4e9c0ff21c67a590c079
parentf17838a97b2080d65d15c47d23ededad0cae4b27 (diff)
nuked imlib2 usage; use libjpeg directly to prepare images for notifications
-rw-r--r--README2
-rw-r--r--configure.ac10
-rw-r--r--lib-x86-32/include/Imlib2.h513
-rw-r--r--lib-x86-32/libImlib2.abin886792 -> 0 bytes
-rw-r--r--plugins/artwork/Makefile.am4
-rw-r--r--plugins/artwork/artwork.c175
6 files changed, 180 insertions, 524 deletions
diff --git a/README b/README
index 0c2537da..bedc3517 100644
--- a/README
+++ b/README
@@ -31,7 +31,7 @@ full list of dependencies:
alsa-lib: ALSA support
libvorbis and libogg: for ogg vorbis plugin
libcurl >= 7.10: for last.fm, vfs_curl (shoutcast/icecast), artwork plugins
- imlib2: for artwork plugin
+ libjpeg: for artwork plugin
libmad: for mp3 plugin (mpeg1,2 layers1,2,3)
libFLAC: for flac plugin
wavpack: for wavpack plugin
diff --git a/configure.ac b/configure.ac
index 09942782..364fb678 100644
--- a/configure.ac
+++ b/configure.ac
@@ -415,14 +415,14 @@ fi
if test "x$enable_artwork" != "xno" ; then
if test "x$enable_staticlink" != "xno" ; then
- HAVE_IMLIB2=yes
- IMLIB2_DEPS_LIBS="../../$LIB/libImlib2.a ../../$LIB/ft2.o"
- AC_SUBST(IMLIB2_DEPS_LIBS)
+ HAVE_JPEG=yes
+ JPEG_DEPS_LIBS="../../$LIB/libjpeg.a"
+ AC_SUBST(JPEG_DEPS_LIBS)
else
- PKG_CHECK_MODULES(IMLIB2_DEPS, imlib2, HAVE_IMLIB2=yes, HAVE_IMLIB2=no)
+ PKG_CHECK_MODULES(JPEG_DEPS, jpeg, HAVE_JPEG=yes, HAVE_JPEG=no)
fi
- if test "x$HAVE_VFS_CURL" = "xyes" && test "x$HAVE_IMLIB2" == "xyes" ; then
+ if test "x$HAVE_VFS_CURL" = "xyes" && test "x$HAVE_JPEG" == "xyes" ; then
HAVE_ARTWORK=yes
fi
fi
diff --git a/lib-x86-32/include/Imlib2.h b/lib-x86-32/include/Imlib2.h
deleted file mode 100644
index 554ae9bb..00000000
--- a/lib-x86-32/include/Imlib2.h
+++ /dev/null
@@ -1,513 +0,0 @@
-#ifndef __IMLIB_API_H
-# define __IMLIB_API_H 1
-
-# ifdef EAPI
-# undef EAPI
-# endif
-# ifdef WIN32
-# ifdef BUILDING_DLL
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI __declspec(dllimport)
-# endif
-# else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-# endif
-
-# ifndef X_DISPLAY_MISSING
-# include <X11/Xlib.h>
-# endif
-
-/* Data types to use */
-# ifndef DATA64
-# define DATA64 unsigned long long
-# define DATA32 unsigned int
-# define DATA16 unsigned short
-# define DATA8 unsigned char
-# endif
-
-/* opaque data types */
-typedef void *Imlib_Context;
-typedef void *Imlib_Image;
-typedef void *Imlib_Color_Modifier;
-typedef void *Imlib_Updates;
-typedef void *Imlib_Font;
-typedef void *Imlib_Color_Range;
-typedef void *Imlib_Filter;
-typedef struct _imlib_border Imlib_Border;
-typedef struct _imlib_color Imlib_Color;
-typedef void *ImlibPolygon;
-
-/* blending operations */
-enum _imlib_operation
-{
- IMLIB_OP_COPY,
- IMLIB_OP_ADD,
- IMLIB_OP_SUBTRACT,
- IMLIB_OP_RESHADE
-};
-
-enum _imlib_text_direction
-{
- IMLIB_TEXT_TO_RIGHT = 0,
- IMLIB_TEXT_TO_LEFT = 1,
- IMLIB_TEXT_TO_DOWN = 2,
- IMLIB_TEXT_TO_UP = 3,
- IMLIB_TEXT_TO_ANGLE = 4
-};
-
-enum _imlib_load_error
-{
- IMLIB_LOAD_ERROR_NONE,
- IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST,
- IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY,
- IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ,
- IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT,
- IMLIB_LOAD_ERROR_PATH_TOO_LONG,
- IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT,
- IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY,
- IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE,
- IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS,
- IMLIB_LOAD_ERROR_OUT_OF_MEMORY,
- IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS,
- IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE,
- IMLIB_LOAD_ERROR_OUT_OF_DISK_SPACE,
- IMLIB_LOAD_ERROR_UNKNOWN
-};
-
-/* Encodings known to Imlib2 (so far) */
-enum _imlib_TTF_encoding
-{
- IMLIB_TTF_ENCODING_ISO_8859_1,
- IMLIB_TTF_ENCODING_ISO_8859_2,
- IMLIB_TTF_ENCODING_ISO_8859_3,
- IMLIB_TTF_ENCODING_ISO_8859_4,
- IMLIB_TTF_ENCODING_ISO_8859_5
-};
-
-typedef enum _imlib_operation Imlib_Operation;
-typedef enum _imlib_load_error Imlib_Load_Error;
-typedef enum _imlib_load_error ImlibLoadError;
-typedef enum _imlib_text_direction Imlib_Text_Direction;
-typedef enum _imlib_TTF_encoding Imlib_TTF_Encoding;
-
-struct _imlib_border
-{
- int left, right, top, bottom;
-};
-
-struct _imlib_color
-{
- int alpha, red, green, blue;
-};
-
-/* Progressive loading callbacks */
-typedef int (*Imlib_Progress_Function) (Imlib_Image im, char percent,
- int update_x, int update_y,
- int update_w, int update_h);
-typedef void (*Imlib_Data_Destructor_Function) (Imlib_Image im, void *data);
-
-# ifdef __cplusplus
-extern "C"
-{
-# endif
-
-/* context handling */
- EAPI Imlib_Context imlib_context_new(void);
- EAPI void imlib_context_free(Imlib_Context context);
-
- EAPI void imlib_context_push(Imlib_Context context);
- EAPI void imlib_context_pop(void);
- EAPI Imlib_Context imlib_context_get(void);
-
-/* context setting */
-# ifndef X_DISPLAY_MISSING
- EAPI void imlib_context_set_display(Display * display);
- EAPI void imlib_context_disconnect_display(void);
- EAPI void imlib_context_set_visual(Visual * visual);
- EAPI void imlib_context_set_colormap(Colormap colormap);
- EAPI void imlib_context_set_drawable(Drawable drawable);
- EAPI void imlib_context_set_mask(Pixmap mask);
-# endif
- EAPI void imlib_context_set_dither_mask(char dither_mask);
- EAPI void imlib_context_set_mask_alpha_threshold(int mask_alpha_threshold);
- EAPI void imlib_context_set_anti_alias(char anti_alias);
- EAPI void imlib_context_set_dither(char dither);
- EAPI void imlib_context_set_blend(char blend);
- EAPI void imlib_context_set_color_modifier(Imlib_Color_Modifier color_modifier);
- EAPI void imlib_context_set_operation(Imlib_Operation operation);
- EAPI void imlib_context_set_font(Imlib_Font font);
- EAPI void imlib_context_set_direction(Imlib_Text_Direction direction);
- EAPI void imlib_context_set_angle(double angle);
- EAPI void imlib_context_set_color(int red, int green, int blue, int alpha);
- EAPI void imlib_context_set_color_hsva(float hue, float saturation, float value, int alpha);
- EAPI void imlib_context_set_color_hlsa(float hue, float lightness, float saturation, int alpha);
- EAPI void imlib_context_set_color_cmya(int cyan, int magenta, int yellow, int alpha);
- EAPI void imlib_context_set_color_range(Imlib_Color_Range color_range);
- EAPI void imlib_context_set_progress_function(Imlib_Progress_Function
- progress_function);
- EAPI void imlib_context_set_progress_granularity(char progress_granularity);
- EAPI void imlib_context_set_image(Imlib_Image image);
- EAPI void imlib_context_set_cliprect(int x, int y, int w, int h);
- EAPI void imlib_context_set_TTF_encoding(Imlib_TTF_Encoding encoding);
-
-/* context getting */
-# ifndef X_DISPLAY_MISSING
- EAPI Display *imlib_context_get_display(void);
- EAPI Visual *imlib_context_get_visual(void);
- EAPI Colormap imlib_context_get_colormap(void);
- EAPI Drawable imlib_context_get_drawable(void);
- EAPI Pixmap imlib_context_get_mask(void);
-# endif
- EAPI char imlib_context_get_dither_mask(void);
- EAPI char imlib_context_get_anti_alias(void);
- EAPI int imlib_context_get_mask_alpha_threshold(void);
- EAPI char imlib_context_get_dither(void);
- EAPI char imlib_context_get_blend(void);
- EAPI Imlib_Color_Modifier imlib_context_get_color_modifier(void);
- EAPI Imlib_Operation imlib_context_get_operation(void);
- EAPI Imlib_Font imlib_context_get_font(void);
- EAPI double imlib_context_get_angle(void);
- EAPI Imlib_Text_Direction imlib_context_get_direction(void);
- EAPI void imlib_context_get_color(int *red, int *green, int *blue, int *alpha);
- EAPI void imlib_context_get_color_hsva(float *hue, float *saturation, float *value, int *alpha);
- EAPI void imlib_context_get_color_hlsa(float *hue, float *lightness, float *saturation, int *alpha);
- EAPI void imlib_context_get_color_cmya(int *cyan, int *magenta, int *yellow, int *alpha);
- EAPI Imlib_Color *imlib_context_get_imlib_color(void);
- EAPI Imlib_Color_Range imlib_context_get_color_range(void);
- EAPI Imlib_Progress_Function imlib_context_get_progress_function(void);
- EAPI char imlib_context_get_progress_granularity(void);
- EAPI Imlib_Image imlib_context_get_image(void);
- EAPI void imlib_context_get_cliprect(int *x, int *y, int *w, int *h);
- EAPI Imlib_TTF_Encoding imlib_context_get_TTF_encoding(void);
-
- EAPI int imlib_get_cache_size(void);
- EAPI void imlib_set_cache_size(int bytes);
- EAPI int imlib_get_color_usage(void);
- EAPI void imlib_set_color_usage(int max);
- EAPI void imlib_flush_loaders(void);
-# ifndef X_DISPLAY_MISSING
- EAPI int imlib_get_visual_depth(Display * display, Visual * visual);
- EAPI Visual *imlib_get_best_visual(Display * display, int screen,
- int *depth_return);
-# endif
-
- EAPI Imlib_Image imlib_load_image(const char *file);
- EAPI Imlib_Image imlib_load_image_immediately(const char *file);
- EAPI Imlib_Image imlib_load_image_without_cache(const char *file);
- EAPI Imlib_Image imlib_load_image_immediately_without_cache(const char *file);
- EAPI Imlib_Image imlib_load_image_with_error_return(const char *file,
- Imlib_Load_Error *
- error_return);
- EAPI void imlib_free_image(void);
- EAPI void imlib_free_image_and_decache(void);
-
-/* query/modify image parameters */
- EAPI int imlib_image_get_width(void);
- EAPI int imlib_image_get_height(void);
- EAPI const char *imlib_image_get_filename(void);
- EAPI DATA32 *imlib_image_get_data(void);
- EAPI DATA32 *imlib_image_get_data_for_reading_only(void);
- EAPI void imlib_image_put_back_data(DATA32 * data);
- EAPI char imlib_image_has_alpha(void);
- EAPI void imlib_image_set_changes_on_disk(void);
- EAPI void imlib_image_get_border(Imlib_Border * border);
- EAPI void imlib_image_set_border(Imlib_Border * border);
- EAPI void imlib_image_set_format(const char *format);
- EAPI void imlib_image_set_irrelevant_format(char irrelevant);
- EAPI void imlib_image_set_irrelevant_border(char irrelevant);
- EAPI void imlib_image_set_irrelevant_alpha(char irrelevant);
- EAPI char *imlib_image_format(void);
- EAPI void imlib_image_set_has_alpha(char has_alpha);
- EAPI void imlib_image_query_pixel(int x, int y, Imlib_Color * color_return);
- EAPI void imlib_image_query_pixel_hsva(int x, int y, float *hue, float *saturation, float *value, int *alpha);
- EAPI void imlib_image_query_pixel_hlsa(int x, int y, float *hue, float *lightness, float *saturation, int *alpha);
- EAPI void imlib_image_query_pixel_cmya(int x, int y, int *cyan, int *magenta, int *yellow, int *alpha);
-
-/* rendering functions */
-# ifndef X_DISPLAY_MISSING
- EAPI void imlib_render_pixmaps_for_whole_image(Pixmap * pixmap_return,
- Pixmap * mask_return);
- EAPI void imlib_render_pixmaps_for_whole_image_at_size(Pixmap * pixmap_return,
- Pixmap * mask_return,
- int width, int height);
- EAPI void imlib_free_pixmap_and_mask(Pixmap pixmap);
- EAPI void imlib_render_image_on_drawable(int x, int y);
- EAPI void imlib_render_image_on_drawable_at_size(int x, int y, int width,
- int height);
- EAPI void imlib_render_image_part_on_drawable_at_size(int source_x,
- int source_y,
- int source_width,
- int source_height, int x,
- int y, int width,
- int height);
- EAPI DATA32 imlib_render_get_pixel_color(void);
-# endif
- EAPI void imlib_blend_image_onto_image(Imlib_Image source_image,
- char merge_alpha, int source_x,
- int source_y, int source_width,
- int source_height, int destination_x,
- int destination_y, int destination_width,
- int destination_height);
-
-/* creation functions */
- EAPI Imlib_Image imlib_create_image(int width, int height);
- EAPI Imlib_Image imlib_create_image_using_data(int width, int height,
- DATA32 * data);
- EAPI Imlib_Image imlib_create_image_using_copied_data(int width, int height,
- DATA32 * data);
-# ifndef X_DISPLAY_MISSING
- EAPI Imlib_Image imlib_create_image_from_drawable(Pixmap mask, int x, int y,
- int width, int height,
- char need_to_grab_x);
- EAPI Imlib_Image imlib_create_image_from_ximage(XImage *image, XImage *mask, int x, int y,
- int width, int height,
- char need_to_grab_x);
- EAPI Imlib_Image imlib_create_scaled_image_from_drawable(Pixmap mask,
- int source_x,
- int source_y,
- int source_width,
- int source_height,
- int destination_width,
- int destination_height,
- char need_to_grab_x,
- char
- get_mask_from_shape);
- EAPI char imlib_copy_drawable_to_image(Pixmap mask, int x, int y, int width,
- int height, int destination_x,
- int destination_y, char need_to_grab_x);
-# endif
- EAPI Imlib_Image imlib_clone_image(void);
- EAPI Imlib_Image imlib_create_cropped_image(int x, int y, int width,
- int height);
- EAPI Imlib_Image imlib_create_cropped_scaled_image(int source_x, int source_y,
- int source_width,
- int source_height,
- int destination_width,
- int destination_height);
-
-/* imlib updates. lists of rectangles for storing required update draws */
- EAPI Imlib_Updates imlib_updates_clone(Imlib_Updates updates);
- EAPI Imlib_Updates imlib_update_append_rect(Imlib_Updates updates, int x, int y,
- int w, int h);
- EAPI Imlib_Updates imlib_updates_merge(Imlib_Updates updates, int w, int h);
- EAPI Imlib_Updates imlib_updates_merge_for_rendering(Imlib_Updates updates,
- int w, int h);
- EAPI void imlib_updates_free(Imlib_Updates updates);
- EAPI Imlib_Updates imlib_updates_get_next(Imlib_Updates updates);
- EAPI void imlib_updates_get_coordinates(Imlib_Updates updates, int *x_return,
- int *y_return, int *width_return,
- int *height_return);
- EAPI void imlib_updates_set_coordinates(Imlib_Updates updates, int x, int y,
- int width, int height);
- EAPI void imlib_render_image_updates_on_drawable(Imlib_Updates updates, int x,
- int y);
- EAPI Imlib_Updates imlib_updates_init(void);
- EAPI Imlib_Updates imlib_updates_append_updates(Imlib_Updates updates,
- Imlib_Updates appended_updates);
-
-/* image modification */
- EAPI void imlib_image_flip_horizontal(void);
- EAPI void imlib_image_flip_vertical(void);
- EAPI void imlib_image_flip_diagonal(void);
- EAPI void imlib_image_orientate(int orientation);
- EAPI void imlib_image_blur(int radius);
- EAPI void imlib_image_sharpen(int radius);
- EAPI void imlib_image_tile_horizontal(void);
- EAPI void imlib_image_tile_vertical(void);
- EAPI void imlib_image_tile(void);
-
-/* fonts and text */
- EAPI Imlib_Font imlib_load_font(const char *font_name);
- EAPI void imlib_free_font(void);
- /* NB! The four functions below are deprecated. */
- EAPI int imlib_insert_font_into_fallback_chain(Imlib_Font font, Imlib_Font fallback_font);
- EAPI void imlib_remove_font_from_fallback_chain(Imlib_Font fallback_font);
- EAPI Imlib_Font imlib_get_prev_font_in_fallback_chain(Imlib_Font fn);
- EAPI Imlib_Font imlib_get_next_font_in_fallback_chain(Imlib_Font fn);
- /* NB! The four functions above are deprecated. */
- EAPI void imlib_text_draw(int x, int y, const char *text);
- EAPI void imlib_text_draw_with_return_metrics(int x, int y, const char *text,
- int *width_return,
- int *height_return,
- int *horizontal_advance_return,
- int *vertical_advance_return);
- EAPI void imlib_get_text_size(const char *text, int *width_return,
- int *height_return);
- EAPI void imlib_get_text_advance(const char *text,
- int *horizontal_advance_return,
- int *vertical_advance_return);
- EAPI int imlib_get_text_inset(const char *text);
- EAPI void imlib_add_path_to_font_path(const char *path);
- EAPI void imlib_remove_path_from_font_path(const char *path);
- EAPI char **imlib_list_font_path(int *number_return);
- EAPI int imlib_text_get_index_and_location(const char *text, int x, int y,
- int *char_x_return,
- int *char_y_return,
- int *char_width_return,
- int *char_height_return);
- EAPI void imlib_text_get_location_at_index(const char *text, int index,
- int *char_x_return,
- int *char_y_return,
- int *char_width_return,
- int *char_height_return);
- EAPI char **imlib_list_fonts(int *number_return);
- EAPI void imlib_free_font_list(char **font_list, int number);
- EAPI int imlib_get_font_cache_size(void);
- EAPI void imlib_set_font_cache_size(int bytes);
- EAPI void imlib_flush_font_cache(void);
- EAPI int imlib_get_font_ascent(void);
- EAPI int imlib_get_font_descent(void);
- EAPI int imlib_get_maximum_font_ascent(void);
- EAPI int imlib_get_maximum_font_descent(void);
-
-/* color modifiers */
- EAPI Imlib_Color_Modifier imlib_create_color_modifier(void);
- EAPI void imlib_free_color_modifier(void);
- EAPI void imlib_modify_color_modifier_gamma(double gamma_value);
- EAPI void imlib_modify_color_modifier_brightness(double brightness_value);
- EAPI void imlib_modify_color_modifier_contrast(double contrast_value);
- EAPI void imlib_set_color_modifier_tables(DATA8 * red_table,
- DATA8 * green_table,
- DATA8 * blue_table,
- DATA8 * alpha_table);
- EAPI void imlib_get_color_modifier_tables(DATA8 * red_table,
- DATA8 * green_table,
- DATA8 * blue_table,
- DATA8 * alpha_table);
- EAPI void imlib_reset_color_modifier(void);
- EAPI void imlib_apply_color_modifier(void);
- EAPI void imlib_apply_color_modifier_to_rectangle(int x, int y, int width,
- int height);
-
-/* drawing on images */
- EAPI Imlib_Updates imlib_image_draw_pixel(int x, int y, char make_updates);
- EAPI Imlib_Updates imlib_image_draw_line(int x1, int y1, int x2, int y2,
- char make_updates);
- EAPI void imlib_image_draw_rectangle(int x, int y, int width, int height);
- EAPI void imlib_image_fill_rectangle(int x, int y, int width, int height);
- EAPI void imlib_image_copy_alpha_to_image(Imlib_Image image_source, int x,
- int y);
- EAPI void imlib_image_copy_alpha_rectangle_to_image(Imlib_Image image_source,
- int x, int y, int width,
- int height,
- int destination_x,
- int destination_y);
- EAPI void imlib_image_scroll_rect(int x, int y, int width, int height,
- int delta_x, int delta_y);
- EAPI void imlib_image_copy_rect(int x, int y, int width, int height, int new_x,
- int new_y);
-
-/* polygons */
- EAPI ImlibPolygon imlib_polygon_new(void);
- EAPI void imlib_polygon_free(ImlibPolygon poly);
- EAPI void imlib_polygon_add_point(ImlibPolygon poly, int x, int y);
- EAPI void imlib_image_draw_polygon(ImlibPolygon poly, unsigned char closed);
- EAPI void imlib_image_fill_polygon(ImlibPolygon poly);
- EAPI void imlib_polygon_get_bounds(ImlibPolygon poly, int *px1, int *py1,
- int *px2, int *py2);
- EAPI unsigned char imlib_polygon_contains_point(ImlibPolygon poly, int x,
- int y);
-
-/* ellipses */
- EAPI void imlib_image_draw_ellipse(int xc, int yc, int a, int b);
- EAPI void imlib_image_fill_ellipse(int xc, int yc, int a, int b);
-
-/* color ranges */
- EAPI Imlib_Color_Range imlib_create_color_range(void);
- EAPI void imlib_free_color_range(void);
- EAPI void imlib_add_color_to_color_range(int distance_away);
- EAPI void imlib_image_fill_color_range_rectangle(int x, int y, int width,
- int height, double angle);
- EAPI void imlib_image_fill_hsva_color_range_rectangle(int x, int y, int width,
- int height, double angle);
-
-/* image data */
- EAPI void imlib_image_attach_data_value(const char *key, void *data, int value,
- Imlib_Data_Destructor_Function
- destructor_function);
- EAPI void *imlib_image_get_attached_data(const char *key);
- EAPI int imlib_image_get_attached_value(const char *key);
- EAPI void imlib_image_remove_attached_data_value(const char *key);
- EAPI void imlib_image_remove_and_free_attached_data_value(const char *key);
-
-/* saving */
- EAPI void imlib_save_image(const char *filename);
- EAPI void imlib_save_image_with_error_return(const char *filename,
- Imlib_Load_Error * error_return);
-
-/* FIXME: */
-/* need to add arbitary rotation routines */
-
-/* rotation/skewing */
- EAPI Imlib_Image imlib_create_rotated_image(double angle);
-
-/* rotation from buffer to context (without copying)*/
- EAPI void imlib_rotate_image_from_buffer(double angle,
- Imlib_Image source_image);
-
- EAPI void imlib_blend_image_onto_image_at_angle(Imlib_Image source_image,
- char merge_alpha, int source_x,
- int source_y, int source_width,
- int source_height,
- int destination_x,
- int destination_y, int angle_x,
- int angle_y);
- EAPI void imlib_blend_image_onto_image_skewed(Imlib_Image source_image,
- char merge_alpha, int source_x,
- int source_y, int source_width,
- int source_height,
- int destination_x,
- int destination_y, int h_angle_x,
- int h_angle_y, int v_angle_x,
- int v_angle_y);
-# ifndef X_DISPLAY_MISSING
- EAPI void imlib_render_image_on_drawable_skewed(int source_x, int source_y,
- int source_width,
- int source_height,
- int destination_x,
- int destination_y,
- int h_angle_x, int h_angle_y,
- int v_angle_x, int v_angle_y);
- EAPI void imlib_render_image_on_drawable_at_angle(int source_x, int source_y,
- int source_width,
- int source_height,
- int destination_x,
- int destination_y,
- int angle_x, int angle_y);
-# endif
-
-/* image filters */
- EAPI void imlib_image_filter(void);
- EAPI Imlib_Filter imlib_create_filter(int initsize);
- EAPI void imlib_context_set_filter(Imlib_Filter filter);
- EAPI Imlib_Filter imlib_context_get_filter(void);
- EAPI void imlib_free_filter(void);
- EAPI void imlib_filter_set(int xoff, int yoff, int a, int r, int g, int b);
- EAPI void imlib_filter_set_alpha(int xoff, int yoff, int a, int r, int g,
- int b);
- EAPI void imlib_filter_set_red(int xoff, int yoff, int a, int r, int g, int b);
- EAPI void imlib_filter_set_green(int xoff, int yoff, int a, int r, int g,
- int b);
- EAPI void imlib_filter_set_blue(int xoff, int yoff, int a, int r, int g, int b);
- EAPI void imlib_filter_constants(int a, int r, int g, int b);
- EAPI void imlib_filter_divisors(int a, int r, int g, int b);
-
- EAPI void imlib_apply_filter(char *script, ...);
-
- EAPI void imlib_image_clear(void);
- EAPI void imlib_image_clear_color(int r, int g, int b, int a);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git a/lib-x86-32/libImlib2.a b/lib-x86-32/libImlib2.a
deleted file mode 100644
index c97354eb..00000000
--- a/lib-x86-32/libImlib2.a
+++ /dev/null
Binary files differ
diff --git a/plugins/artwork/Makefile.am b/plugins/artwork/Makefile.am
index 8f9ea166..aa0c7d14 100644
--- a/plugins/artwork/Makefile.am
+++ b/plugins/artwork/Makefile.am
@@ -5,6 +5,6 @@ artwork_la_SOURCES = artwork.c artwork.h albumartorg.c albumartorg.h lastfm.c la
artwork_la_LDFLAGS = -module
-artwork_la_LIBADD = $(LDADD) $(ARTWORK_DEPS_LIBS) $(IMLIB2_DEPS_LIBS)
-AM_CFLAGS = -std=c99 $(ARTWORK_DEPS_CFLAGS) $(IMLIB2_DEPS_CFLAGS)
+artwork_la_LIBADD = $(LDADD) $(JPEG_DEPS_LIBS)
+AM_CFLAGS = -std=c99
endif
diff --git a/plugins/artwork/artwork.c b/plugins/artwork/artwork.c
index 82b677dd..76cb31fe 100644
--- a/plugins/artwork/artwork.c
+++ b/plugins/artwork/artwork.c
@@ -7,12 +7,20 @@
#include <unistd.h>
#include <fnmatch.h>
#include <inttypes.h>
-#include <Imlib2.h>
#include "../../deadbeef.h"
#include "artwork.h"
#include "lastfm.h"
#include "albumartorg.h"
+#ifdef USE_IMLIB2
+#include <Imlib2.h>
+static uintptr_t imlib_mutex;
+#else
+#include <jpeglib.h>
+#include <jerror.h>
+#include <setjmp.h>
+#endif
+
#define min(x,y) ((x)<(y)?(x):(y))
//#define trace(...) { fprintf(stderr, __VA_ARGS__); }
@@ -39,7 +47,6 @@ typedef struct cover_query_s {
static cover_query_t *queue;
static cover_query_t *queue_tail;
static uintptr_t mutex;
-static uintptr_t imlib_mutex;
static uintptr_t cond;
static volatile int terminate;
static volatile int clear_queue;
@@ -173,6 +180,158 @@ check_dir (const char *dir, mode_t mode)
return 1;
}
+struct my_error_mgr {
+ struct jpeg_error_mgr pub; /* "public" fields */
+
+ jmp_buf setjmp_buffer; /* for return to caller */
+};
+
+typedef struct my_error_mgr * my_error_ptr;
+
+METHODDEF(void)
+my_error_exit (j_common_ptr cinfo)
+{
+ /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */
+ my_error_ptr myerr = (my_error_ptr) cinfo->err;
+
+ /* Always display the message. */
+ /* We could postpone this until after returning, if we chose. */
+ (*cinfo->err->output_message) (cinfo);
+
+ /* Return control to the setjmp point */
+ longjmp(myerr->setjmp_buffer, 1);
+}
+
+
+static int
+jpeg_resize (const char *fname, const char *outname, int scaled_size) {
+ trace ("resizing %s into %s\n", fname, outname);
+ struct jpeg_decompress_struct cinfo;
+ struct jpeg_compress_struct cinfo_out;
+
+ memset (&cinfo, 0, sizeof (cinfo));
+ memset (&cinfo_out, 0, sizeof (cinfo_out));
+
+ struct my_error_mgr jerr;
+
+ uint8_t *c;
+ FILE *fp = NULL, *out = NULL;
+
+
+ cinfo.err = jpeg_std_error (&jerr.pub);
+
+ jerr.pub.error_exit = my_error_exit;
+ /* Establish the setjmp return context for my_error_exit to use. */
+ if (setjmp(jerr.setjmp_buffer)) {
+ /* If we get here, the JPEG code has signaled an error.
+ * We need to clean up the JPEG object, close the input file, and return.
+ */
+ jpeg_destroy_decompress(&cinfo);
+ jpeg_destroy_compress(&cinfo_out);
+ if (fp) {
+ fclose(fp);
+ }
+ if (out) {
+ fclose (out);
+ }
+ return -1;
+ }
+
+ jpeg_create_decompress (&cinfo);
+
+ fp = fopen (fname, "rb");
+ if (!fp) {
+ return -1;
+ }
+ out = fopen (outname, "w+b");
+ if (!out) {
+ fclose (fp);
+ return -1;
+ }
+
+ jpeg_stdio_src (&cinfo, fp);
+
+ jpeg_read_header (&cinfo, TRUE);
+ jpeg_start_decompress (&cinfo);
+
+ int i;
+
+ cinfo_out.err = cinfo.err;
+
+ jpeg_create_compress(&cinfo_out);
+
+ jpeg_stdio_dest(&cinfo_out, out);
+
+ int sw, sh;
+ if (deadbeef->conf_get_int ("artwork.scale_towards_longer", 1)) {
+ if (cinfo.image_width > cinfo.image_height) {
+ sh = scaled_size;
+ sw = scaled_size * cinfo.image_width / cinfo.image_height;
+ }
+ else {
+ sw = scaled_size;
+ sh = scaled_size * cinfo.image_height / cinfo.image_width;
+ }
+ }
+ else {
+ if (cinfo.image_width < cinfo.image_height) {
+ sh = scaled_size;
+ sw = scaled_size * cinfo.image_width / cinfo.image_height;
+ }
+ else {
+ sw = scaled_size;
+ sh = scaled_size * cinfo.image_height / cinfo.image_width;
+ }
+ }
+
+
+ cinfo_out.image_width = sw;
+ cinfo_out.image_height = sh;
+ cinfo_out.input_components = cinfo.output_components;
+ cinfo_out.in_color_space = cinfo.out_color_space;
+
+ jpeg_set_defaults(&cinfo_out);
+
+ jpeg_set_quality(&cinfo_out, 100, TRUE);
+ jpeg_start_compress(&cinfo_out, TRUE);
+
+ float sy = 0;
+ float dy = (float)cinfo.output_height / (float)sh;
+
+ while (cinfo.output_scanline < cinfo.output_height)
+ {
+ uint8_t buf[cinfo.output_width * cinfo.output_components];
+ uint8_t *ptr = buf;
+ jpeg_read_scanlines (&cinfo, &ptr, 1);
+
+ // scale row
+ uint8_t out_buf[sw * cinfo.output_components];
+ float sx = 0;
+ float dx = (float)cinfo.output_width/(float)sw;
+ for (int i = 0; i < sw; i++) {
+ memcpy (&out_buf[i * cinfo.output_components], &buf[(int)sx * cinfo.output_components], cinfo.output_components);
+ sx += dx;
+ }
+
+ while ((int)sy == cinfo.output_scanline-1) {
+ uint8_t *ptr = out_buf;
+ jpeg_write_scanlines(&cinfo_out, &ptr, 1);
+ sy += dy;
+ }
+ }
+
+ jpeg_finish_compress(&cinfo_out); //Always finish
+ jpeg_destroy_compress(&cinfo_out); //Free resources
+
+ jpeg_finish_decompress (&cinfo);
+ jpeg_destroy_decompress (&cinfo);
+
+ fclose(fp);
+ fclose(out);
+
+ return 0;
+}
+
#define BUFFER_SIZE 4096
static int
@@ -180,6 +339,7 @@ copy_file (const char *in, const char *out, int img_size) {
trace ("copying %s to %s\n", in, out);
if (img_size != -1) {
+#ifdef USE_IMLIB2
deadbeef->mutex_lock (imlib_mutex);
// need to scale, use imlib2
Imlib_Image img = imlib_load_image_immediately (in);
@@ -230,7 +390,12 @@ copy_file (const char *in, const char *out, int img_size) {
imlib_context_set_image(img);
imlib_free_image ();
deadbeef->mutex_unlock (imlib_mutex);
-
+#else
+ int res = jpeg_resize (in, out, img_size);
+ if (res != 0) {
+ unlink (out);
+ }
+#endif
return 0;
}
@@ -788,7 +953,9 @@ artwork_plugin_start (void)
artwork_filemask[sizeof(artwork_filemask)-1] = 0;
mutex = deadbeef->mutex_create_nonrecursive ();
+#ifdef USE_IMLIB2
imlib_mutex = deadbeef->mutex_create_nonrecursive ();
+#endif
cond = deadbeef->cond_create ();
tid = deadbeef->thread_start_low_priority (fetcher_thread, NULL);
@@ -814,10 +981,12 @@ artwork_plugin_stop (void)
deadbeef->mutex_free (mutex);
mutex = 0;
}
+#ifdef USE_IMLIB2
if (imlib_mutex) {
deadbeef->mutex_free (imlib_mutex);
imlib_mutex = 0;
}
+#endif
if (cond) {
deadbeef->cond_free (cond);
cond = 0;