[gimp] Bug 794152 - JPEG 2000 Code Stream .j2c support.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 794152 - JPEG 2000 Code Stream .j2c support.
- Date: Fri, 9 Mar 2018 23:31:41 +0000 (UTC)
commit 3d5545293394b824d3c0ac036806be7aa3e9fa09
Author: Jehan <jehan girinstud io>
Date: Sat Mar 10 00:03:15 2018 +0100
Bug 794152 - JPEG 2000 Code Stream .j2c support.
Current OpenJPEG code only supported the base JP2 container. It now
supports also the JPEG 2000 codestream (which is usually contained
inside other formats, like the JP2 container format, but can also
sometimes be on its own).
The current magics and extension strings were also mixing all kind of
formats. This is now cleaned up a bit.
plug-ins/common/file-jp2-load.c | 77 +++++++++++++++++++++++++++------------
1 files changed, 54 insertions(+), 23 deletions(-)
---
diff --git a/plug-ins/common/file-jp2-load.c b/plug-ins/common/file-jp2-load.c
index dcdc443..1b41634 100644
--- a/plug-ins/common/file-jp2-load.c
+++ b/plug-ins/common/file-jp2-load.c
@@ -88,18 +88,20 @@
#include <openjpeg.h>
-#define LOAD_PROC "file-jp2-load"
-#define PLUG_IN_BINARY "file-jp2-load"
+#define LOAD_JP2_PROC "file-jp2-load"
+#define LOAD_J2K_PROC "file-j2k-load"
+#define PLUG_IN_BINARY "file-jp2-load"
static void query (void);
-static void run (const gchar *name,
- gint nparams,
- const GimpParam *param,
- gint *nreturn_vals,
- GimpParam **return_vals);
-static gint32 load_image (const gchar *filename,
- GError **error);
+static void run (const gchar *name,
+ gint nparams,
+ const GimpParam *param,
+ gint *nreturn_vals,
+ GimpParam **return_vals);
+static gint32 load_image (const gchar *filename,
+ OPJ_CODEC_FORMAT format,
+ GError **error);
const GimpPlugInInfo PLUG_IN_INFO =
{
@@ -127,11 +129,11 @@ query (void)
{ GIMP_PDB_IMAGE, "image", "Output image" }
};
- gimp_install_procedure (LOAD_PROC,
+ gimp_install_procedure (LOAD_JP2_PROC,
"Loads JPEG 2000 images.",
"The JPEG 2000 image loader.",
- "Aurimas Juška",
- "Aurimas Juška, Florian Traverse",
+ "Mukund Sivaraman",
+ "Mukund Sivaraman",
"2009",
N_("JPEG 2000 image"),
NULL,
@@ -139,13 +141,37 @@ query (void)
G_N_ELEMENTS (load_args),
G_N_ELEMENTS (load_return_vals),
load_args, load_return_vals);
-
- gimp_register_magic_load_handler (LOAD_PROC,
- "jp2,jpc,jpx,j2k,jpf",
+ /*
+ * XXX: more complete magic number would be:
+ * "0,string,\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A"
+ * But the '\0' character makes problem in a 0-terminated string
+ * obviously, as well as some other space characters, it would seem.
+ * The below smaller version seems ok and not interfering with other
+ * formats.
+ */
+ gimp_register_magic_load_handler (LOAD_JP2_PROC,
+ "jp2",
"",
- "4,string,jP,0,string,\xff\x4f\xff\x51\x00");
-
- gimp_register_file_handler_mime (LOAD_PROC, "image/jp2");
+ "3,string,\x0CjP");
+ gimp_register_file_handler_mime (LOAD_JP2_PROC, "image/jp2");
+
+ gimp_install_procedure (LOAD_J2K_PROC,
+ "Loads JPEG 2000 codestream.",
+ "The JPEG 2000 codestream loader.",
+ "Jehan",
+ "Jehan",
+ "2009",
+ N_("JPEG 2000 codestream"),
+ NULL,
+ GIMP_PLUGIN,
+ G_N_ELEMENTS (load_args),
+ G_N_ELEMENTS (load_return_vals),
+ load_args, load_return_vals);
+ gimp_register_magic_load_handler (LOAD_J2K_PROC,
+ "j2k,j2c",
+ "",
+ "0,string,\xff\x4f\xff\x51\x00");
+ gimp_register_file_handler_mime (LOAD_J2K_PROC, "image/x-jp2-codestream");
}
static void
@@ -172,7 +198,8 @@ run (const gchar *name,
values[0].type = GIMP_PDB_STATUS;
values[0].data.d_status = GIMP_PDB_EXECUTION_ERROR;
- if (strcmp (name, LOAD_PROC) == 0)
+ if (strcmp (name, LOAD_JP2_PROC) == 0 ||
+ strcmp (name, LOAD_J2K_PROC) == 0)
{
gboolean interactive;
@@ -188,7 +215,10 @@ run (const gchar *name,
break;
}
- image_ID = load_image (param[1].data.d_string, &error);
+ if (strcmp (name, LOAD_JP2_PROC) == 0)
+ image_ID = load_image (param[1].data.d_string, OPJ_CODEC_JP2, &error);
+ else /* strcmp (name, LOAD_J2K_PROC) == 0 */
+ image_ID = load_image (param[1].data.d_string, OPJ_CODEC_J2K, &error);
if (image_ID != -1)
{
@@ -798,8 +828,9 @@ color_esycc_to_rgb (opj_image_t *image)
}
static gint32
-load_image (const gchar *filename,
- GError **error)
+load_image (const gchar *filename,
+ OPJ_CODEC_FORMAT format,
+ GError **error)
{
opj_stream_t *stream;
opj_codec_t *codec;
@@ -836,7 +867,7 @@ load_image (const gchar *filename,
goto out;
}
- codec = opj_create_decompress (OPJ_CODEC_JP2);
+ codec = opj_create_decompress (format);
opj_set_default_decoder_parameters (¶meters);
if (opj_setup_decoder (codec, ¶meters) != OPJ_TRUE)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]