Addl fix #610: Support heic image format
authorColin Clark <colin.clark@cclark.uk>
Fri, 5 Jul 2019 10:18:28 +0000 (11:18 +0100)
committerColin Clark <colin.clark@cclark.uk>
Fri, 5 Jul 2019 10:18:28 +0000 (11:18 +0100)
https://github.com/BestImageViewer/geeqie/issues/610

Delete HEIF class. Use magic number to make .heic files class Image

src/filefilter.c
src/image-load.c
src/image.c
src/pixbuf_util.c
src/remote.c
src/search.c
src/thumb.c
src/thumb_standard.c
src/typedefs.h

index a7f7ff2..1fc5328 100644 (file)
@@ -292,7 +292,7 @@ void filter_add_defaults(void)
        /* other supported formats */
        filter_add_if_missing("dds", "DirectDraw Surface", ".dds", FORMAT_CLASS_IMAGE, FALSE, FALSE, TRUE);
        filter_add_if_missing("pdf", "Portable Document Format", ".pdf", FORMAT_CLASS_PDF, FALSE, FALSE, TRUE);
-       filter_add_if_missing("HEIF", "HEIF Format", ".heic", FORMAT_CLASS_HEIF, FALSE, FALSE, TRUE);
+       filter_add_if_missing("HEIF", "HEIF Format", ".heic", FORMAT_CLASS_IMAGE, FALSE, FALSE, TRUE);
 }
 
 GList *filter_to_list(const gchar *extensions)
@@ -473,7 +473,6 @@ FileFormatClass filter_file_get_class(const gchar *name)
        if (filter_file_class(name, FORMAT_CLASS_VIDEO)) return FORMAT_CLASS_VIDEO;
        if (filter_file_class(name, FORMAT_CLASS_COLLECTION)) return FORMAT_CLASS_COLLECTION;
        if (filter_file_class(name, FORMAT_CLASS_PDF)) return FORMAT_CLASS_PDF;
-       if (filter_file_class(name, FORMAT_CLASS_HEIF)) return FORMAT_CLASS_HEIF;
        return FORMAT_CLASS_UNKNOWN;
 }
 
index 02688df..24e5845 100644 (file)
@@ -629,7 +629,8 @@ static void image_loader_setup_loader(ImageLoader *il)
        else
 #endif
 #ifdef HAVE_HEIF
-       if (il->fd->format_class == FORMAT_CLASS_HEIF)
+       if (il->bytes_total >= 10 &&
+           (memcmp(il->mapped_file + 4, "ftypheic", 8) == 0))
                {
                DEBUG_1("Using custom heif loader");
                image_loader_backend_set_heif(&il->backend);
index aa74327..57670ab 100644 (file)
@@ -862,9 +862,6 @@ static void image_load_done_cb(ImageLoader *il, gpointer data)
                        case FORMAT_CLASS_PDF:
                                pixbuf = pixbuf_inline(PIXBUF_INLINE_ICON_PDF);
                                break;
-                       case FORMAT_CLASS_HEIF:
-                               pixbuf = pixbuf_inline(PIXBUF_INLINE_ICON_HEIF);
-                               break;
                        default:
                                pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
                        }
index 35c9cdf..696b8f9 100644 (file)
@@ -297,9 +297,6 @@ GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_he
                case FORMAT_CLASS_PDF:
                        pixbuf = pixbuf_inline(PIXBUF_INLINE_ICON_PDF);
                        break;
-               case FORMAT_CLASS_HEIF:
-                       pixbuf = pixbuf_inline(PIXBUF_INLINE_ICON_HEIF);
-                       break;
                default:
                        pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
                }
index 76a7d52..b543544 100644 (file)
@@ -855,9 +855,6 @@ static void get_filelist(const gchar *text, GIOChannel *channel, gboolean recurs
                        case FORMAT_CLASS_PDF:
                                out_string = g_string_append(out_string, "    Class: PDF");
                                break;
-                       case FORMAT_CLASS_HEIF:
-                               out_string = g_string_append(out_string, "    Class: HEIF");
-                               break;
                        case FORMAT_CLASS_UNKNOWN:
                                out_string = g_string_append(out_string, "    Class: Unknown");
                                break;
index 802c86e..b5cfc5f 100644 (file)
@@ -2184,11 +2184,6 @@ static gboolean search_file_next(SearchData *sd)
                        {
                        search_class = FORMAT_CLASS_RAWIMAGE;
                        }
-               else if (g_strcmp0(gtk_combo_box_text_get_active_text(
-                                               GTK_COMBO_BOX_TEXT(sd->class_type)), _("HEIF")) == 0)
-                       {
-                       search_class = FORMAT_CLASS_HEIF;
-                       }
                else if (g_strcmp0(gtk_combo_box_text_get_active_text(
                                                GTK_COMBO_BOX_TEXT(sd->class_type)), _("Video")) == 0)
                        {
@@ -3379,7 +3374,6 @@ void search_new(FileData *dir_fd, FileData *example_file)
        sd->class_type = gtk_combo_box_text_new();
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Image"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Raw Image"));
-       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("HEIF"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Video"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Pdf"));
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sd->class_type), _("Metadata"));
index c249569..bf18c60 100644 (file)
@@ -337,7 +337,7 @@ gboolean thumb_loader_start(ThumbLoader *tl, FileData *fd)
 
        if (!tl->fd) tl->fd = file_data_ref(fd);
 
-       if (tl->fd->format_class != FORMAT_CLASS_IMAGE && tl->fd->format_class != FORMAT_CLASS_RAWIMAGE && tl->fd->format_class != FORMAT_CLASS_COLLECTION && tl->fd->format_class != FORMAT_CLASS_VIDEO && tl->fd->format_class != FORMAT_CLASS_PDF && tl->fd->format_class != FORMAT_CLASS_HEIF && !options->file_filter.disable)
+       if (tl->fd->format_class != FORMAT_CLASS_IMAGE && tl->fd->format_class != FORMAT_CLASS_RAWIMAGE && tl->fd->format_class != FORMAT_CLASS_COLLECTION && tl->fd->format_class != FORMAT_CLASS_VIDEO && tl->fd->format_class != FORMAT_CLASS_PDF && !options->file_filter.disable)
                {
                thumb_loader_set_fallback(tl);
                return FALSE;
index ff2d02d..f21906b 100644 (file)
@@ -667,7 +667,7 @@ gboolean thumb_loader_std_start(ThumbLoaderStd *tl, FileData *fd)
 
 
        tl->fd = file_data_ref(fd);
-       if (!stat_utf8(fd->path, &st) || (tl->fd->format_class != FORMAT_CLASS_IMAGE && tl->fd->format_class != FORMAT_CLASS_RAWIMAGE && tl->fd->format_class != FORMAT_CLASS_VIDEO && tl->fd->format_class != FORMAT_CLASS_COLLECTION && tl->fd->format_class != FORMAT_CLASS_PDF && tl->fd->format_class != FORMAT_CLASS_HEIF && !options->file_filter.disable))
+       if (!stat_utf8(fd->path, &st) || (tl->fd->format_class != FORMAT_CLASS_IMAGE && tl->fd->format_class != FORMAT_CLASS_RAWIMAGE && tl->fd->format_class != FORMAT_CLASS_VIDEO && tl->fd->format_class != FORMAT_CLASS_COLLECTION && tl->fd->format_class != FORMAT_CLASS_PDF && !options->file_filter.disable))
                {
                thumb_loader_std_set_fallback(tl);
                return FALSE;
index 8b94a45..b31ca33 100644 (file)
@@ -145,7 +145,6 @@ typedef enum {
        FORMAT_CLASS_VIDEO,
        FORMAT_CLASS_COLLECTION,
        FORMAT_CLASS_PDF,
-       FORMAT_CLASS_HEIF,
        FILE_FORMAT_CLASSES
 } FileFormatClass;