pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [pdf-devel] [patch] convert LZW filter to new API


From: jemarch
Subject: Re: [pdf-devel] [patch] convert LZW filter to new API
Date: Wed, 24 Jun 2009 20:32:17 +0200
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/23.0.60 (i686-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO)

Hi Brad.

   === modified file 'src/Makefile.am'
   [...]

   -AM_CFLAGS = -Wall -fno-strict-aliasing $(LIBGCRYPT_CFLAGS)
   +AM_CFLAGS = -Wall -fno-strict-aliasing -Wconversion $(LIBGCRYPT_CFLAGS)

The -Wconversion option makes gcc to generate a lot of warnings in
both header files included from gnulib and our source code.  Is there
a particular reason to add that switch?

Regarding the cache size, the ideal situation is for the filters to be
able to work with any >0 cache size in the stm.

The following merge directive (not applied in the trunk) adds support
for the lzw filter in the pdf-filter utility.  You can merge it into
your patch if you want.  For testing purpose, please note that the
--cache=N option can be used to set the size of the stream cache, and
the usage of a reading stm (instead of the default writing stm) can be
requested with the --readmode parameter.

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: sftp://address@hidden/srv/bzr/pdf\
#   /libgnupdf/branches/trunk/
# testament_sha1: a016490579ace086a16b5d016c051b049b0bcf17
# timestamp: 2009-06-24 20:23:39 +0200
# base_revision_id: address@hidden
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog   2009-06-22 11:20:04 +0000
+++ ChangeLog   2009-06-24 18:23:24 +0000
@@ -1,3 +1,14 @@
+2009-06-24  Jose E. Marchesi  <address@hidden>
+
+       * src/base/pdf-hash-helper.h: Added functions 'pdf_hash_add_bool'
+       and 'pdf_hash_get_bool'.
+
+       * src/base/pdf-hash-helper.c: Likewise.
+
+       * utils/pdf-filter.h: Added support for the LZW filters.
+
+       * utils/pdf-filter.c: Likewise.
+
 2009-06-22  Brad Hards  <address@hidden>
 
        * src/base/pdf-text.c (pdf_text_dup): Protect against NULL arg.

=== modified file 'src/base/pdf-hash-helper.c'
--- src/base/pdf-hash-helper.c  2009-01-27 20:59:40 +0000
+++ src/base/pdf-hash-helper.c  2009-06-24 18:23:24 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/27 21:37:10 jemarch"
+/* -*- mode: C -*- Time-stamp: "09/06/24 20:13:29 jemarch"
  *
  *       File:         pdf-hash-helper.c
  *       Date:         Thu Jul 24 21:05:05 2008
@@ -97,6 +97,37 @@
 }
 
 pdf_status_t
+pdf_hash_add_bool (pdf_hash_t table, const char *key, const pdf_bool_t elt)
+{
+  pdf_bool_t *vbool;
+
+  vbool = pdf_alloc (sizeof(pdf_bool_t));
+  if (vbool == NULL)
+    {
+      return PDF_ERROR;
+    }
+
+  *vbool = elt;
+
+  return (pdf_hash_add (table, key, vbool, pdf_dealloc));
+}
+
+pdf_status_t
+pdf_hash_get_bool (pdf_hash_t table, const char *key, pdf_bool_t *elt)
+{
+  pdf_status_t ret;
+  pdf_bool_t *vbool;
+
+  ret = pdf_hash_get (table, key, (const void **) &vbool);
+  if (ret == PDF_OK)
+    {
+      *elt = *vbool;
+    }
+
+  return ret;
+}
+
+pdf_status_t
 pdf_hash_add_size (pdf_hash_t table, const char *key, const pdf_size_t elt)
 {
   pdf_size_t *size;

=== modified file 'src/base/pdf-hash-helper.h'
--- src/base/pdf-hash-helper.h  2008-12-28 01:13:47 +0000
+++ src/base/pdf-hash-helper.h  2009-06-24 18:23:24 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/12/28 02:10:50 jemarch"
+/* -*- mode: C -*- Time-stamp: "09/06/24 20:13:57 jemarch"
  *
  *       File:         pdf-hash-helper.h
  *       Date:         Thu Jul 24 21:05:05 2008
@@ -73,6 +73,12 @@
 pdf_hash_get_size (pdf_hash_t table, const char *key, pdf_size_t *elt);
 
 pdf_status_t
+pdf_hash_add_bool (pdf_hash_t table, const char *key, const pdf_bool_t elt);
+
+pdf_status_t
+pdf_hash_get_bool (pdf_hash_t table, const char *key, pdf_bool_t *elt);
+
+pdf_status_t
 pdf_hash_add_string (pdf_hash_t table, const char *key, const pdf_char_t *elt);
 
 pdf_status_t

=== modified file 'utils/pdf-filter.c'
--- utils/pdf-filter.c  2009-05-07 09:03:31 +0000
+++ utils/pdf-filter.c  2009-06-24 18:23:24 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/05/07 10:55:00 jemarch"
+/* -*- mode: C -*- Time-stamp: "09/06/24 20:14:29 jemarch"
  *
  *       File:         pdf-filter.c
  *       Date:         Tue Jul 10 18:42:07 2007
@@ -58,11 +58,12 @@
     {"null", no_argument, NULL, NULL_FILTER_ARG},
     {"ahexdec", no_argument, NULL, ASCIIHEXDEC_FILTER_ARG},
     {"ahexenc", no_argument, NULL, ASCIIHEXENC_FILTER_ARG},
+    {"lzwenc", no_argument, NULL, LZWENC_FILTER_ARG},
+    {"lzwdec", no_argument, NULL, LZWDEC_FILTER_ARG},
+    {"lzw-earlychange", no_argument, NULL, LZW_EARLYCHANGE_ARG},
 #if 0
     {"a85dec", no_argument, NULL, ASCII85DEC_FILTER_ARG},
     {"a85enc", no_argument, NULL, ASCII85ENC_FILTER_ARG},
-    {"lzwenc", no_argument, NULL, LZWENC_FILTER_ARG},
-    {"lzwdec", no_argument, NULL, LZWDEC_FILTER_ARG},
     {"cfaxdec", no_argument, NULL, CCITTFAXDEC_FILTER_ARG},
     {"jxpdec", no_argument, NULL, JXPDEC_FILTER_ARG},
     {"predenc", no_argument, NULL, PREDENC_FILTER_ARG},
@@ -108,12 +109,12 @@
 available filters\n\
   --null                              use the NULL filter\n\
   --ahexdec                           use the ASCII Hex decoder filter\n\
-  --ahexenc                           use the ASCII Hex encoder filter\n"
+  --ahexenc                           use the ASCII Hex encoder filter\n\
+  --lzwenc                            use the LZW encoder filter\n\
+  --lzwdec                            use the LZW decoder filter\n"
 #if 0
 "  --a85dec                            use the ASCII 85 decoder filter\n\
   --a85enc                            use the ASCII 85 encoder filter\n\
-  --lzwenc                            use the LZW encoder filter\n\
-  --lzwdec                            use the LZW decoder filter\n
   --jxpdec                            use the JXP decoder filter\n\
   --predenc                           use the predictor encoder filter\n\
   --preddec                           use the predictor decoder filter\n"
@@ -139,14 +140,15 @@
   --version                           show pdf_filter version and exit\n\
 \nfilter properties\n"
 #if 0
-"  --lzw-earlychange                   toggles earlychange for next lzw 
filters\n\
+"  
   --preddec-type=NUM                  code for next preddec filters type\n\
   --predenc-type=NUM                  code for next predenc filters type\n\
   --pred-colors=NUM                   next predictors colors per sample\n\
   --pred-bpc=NUM                      next predictors bits per color 
component\n\
   --pred-columns=NUM                  next predictors number of samples per 
row\n"
 #endif /* 0 */
-"  --jbig2dec-globals=FILE             file containing global segments\n\
+"  --lzw-earlychange                   toggles earlychange for next lzw 
filters\n\
+  --jbig2dec-globals=FILE             file containing global segments\n\
 ";
 
 char *pdf_filter_help_msg = "";
@@ -448,6 +450,7 @@
   char *key = NULL;
   pdf_size_t jbig2dec_global_segments_size = 0;
   pdf_status_t status;
+  pdf_bool_t lzw_earlychange = PDF_FALSE;
 
   /* Initialize the crypt module */
   if (pdf_crypt_init () != PDF_OK)
@@ -554,14 +557,6 @@
           {
             break;
           }
-       case LZWENC_FILTER_ARG:
-          {
-            break;
-          }
-        case LZWDEC_FILTER_ARG:
-          {
-            break;
-          }
         case CCITTFAXDEC_FILTER_ARG:
           {
             break;
@@ -591,6 +586,57 @@
             break;
           }
 #endif /* 0 */
+        case LZW_EARLYCHANGE_ARG:
+          {
+            lzw_earlychange = PDF_TRUE;
+            break;
+          }
+       case LZWENC_FILTER_ARG:
+          {
+            ret = pdf_hash_new (NULL, &filter_params);
+            if (ret != PDF_OK)
+              {
+                pdf_error (ret, stderr, "while creating the lzwenc filter 
parameters hash table");
+                exit (1);
+              }
+
+            pdf_hash_add_bool (filter_params, "EarlyChange", lzw_earlychange);
+
+            status = pdf_stm_install_filter (stm,
+                                             PDF_STM_FILTER_LZW_ENC,
+                                             filter_params);
+
+            if (status != PDF_OK)
+              {
+                pdf_error (status, stderr, "while creating the LZW encoder 
filter");
+                exit (1);
+              }
+
+            break;
+          }
+        case LZWDEC_FILTER_ARG:
+          {
+            ret = pdf_hash_new (NULL, &filter_params);
+            if (ret != PDF_OK)
+              {
+                pdf_error (ret, stderr, "while creating the lzwdec filter 
parameters hash table");
+                exit (1);
+              }
+
+            pdf_hash_add_bool (filter_params, "EarlyChange", lzw_earlychange);
+
+            status = pdf_stm_install_filter (stm,
+                                             PDF_STM_FILTER_LZW_DEC,
+                                             filter_params);
+
+            if (status != PDF_OK)
+              {
+                pdf_error (status, stderr, "while creating the LZW decoder 
filter");
+                exit (1);
+              }
+
+            break;
+          }
 #ifdef HAVE_LIBZ
         case FLATEDEC_FILTER_ARG:
           {

=== modified file 'utils/pdf-filter.h'
--- utils/pdf-filter.h  2009-05-06 17:54:48 +0000
+++ utils/pdf-filter.h  2009-06-24 18:23:24 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/05/06 19:46:33 jemarch"
+/* -*- mode: C -*- Time-stamp: "09/06/24 19:37:20 jemarch"
  *
  *       File:         pdf-filter.h
  *       Date:         Tue Jul 10 18:40:55 2007
@@ -46,8 +46,6 @@
 #if 0
   ASCII85DEC_FILTER_ARG,
   ASCII85ENC_FILTER_ARG,
-  LZWENC_FILTER_ARG,
-  LZWDEC_FILTER_ARG,
   CCITTFAXDEC_FILTER_ARG,
   JXPDEC_FILTER_ARG,
   PREDENC_FILTER_ARG,
@@ -67,6 +65,9 @@
   JBIG2DEC_GLOBAL_SEGMENTS_ARG,
   JBIG2DEC_PAGE_SIZE,
 #endif /* HAVE_LIBJBIG2DEC */
+  LZWENC_FILTER_ARG,
+  LZWDEC_FILTER_ARG,
+  LZW_EARLYCHANGE_ARG,
   MD5ENC_FILTER_ARG,
   KEY_ARG,
   AESENC_FILTER_ARG,

# Begin bundle
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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]