Handle the TIFF/FX better now we have tiff-4.0.2 in the repo.

This commit is contained in:
Steve Underwood 2012-09-02 21:45:08 +08:00 committed by Ken Rice
parent 69fc6e8ffe
commit 6cd47a92da
4 changed files with 34 additions and 20 deletions

View File

@ -238,10 +238,8 @@ AC_CHECK_HEADERS([FL/Fl.H])
AC_CHECK_HEADERS([FL/Fl_Overlay_Window.H]) AC_CHECK_HEADERS([FL/Fl_Overlay_Window.H])
AC_CHECK_HEADERS([FL/Fl_Light_Button.H]) AC_CHECK_HEADERS([FL/Fl_Light_Button.H])
AC_CHECK_HEADERS([FL/fl_draw.H]) AC_CHECK_HEADERS([FL/fl_draw.H])
AC_CHECK_HEADERS([FL/Fl_Cartesian.H], [], [], [],[[#include <FL/Fl.H> AC_CHECK_HEADERS([FL/Fl_Cartesian.H])
]]) AC_CHECK_HEADERS([FL/Fl_Audio_Meter.H])
AC_CHECK_HEADERS([FL/Fl_Audio_Meter.H], [], [], [],[[#include <FL/Fl.H>
]])
AC_LANG([C]) AC_LANG([C])
@ -520,6 +518,8 @@ if test "$enable_builtin_tiff" = "yes" ; then
save_CFLAGS=$CFLAGS save_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -I$abs_tiffdir/libtiff" CFLAGS="$CFLAGS -I$abs_tiffdir/libtiff"
AC_CHECK_HEADERS([tiffio.h]) AC_CHECK_HEADERS([tiffio.h])
AC_CHECK_HEADERS([tif_dir.h], [], [], [#include <tiffio.h>
])
CFLAGS="$save_CFLAGS" CFLAGS="$save_CFLAGS"
COMP_VENDOR_CFLAGS="-I$abs_tiffdir/libtiff $COMP_VENDOR_CFLAGS" COMP_VENDOR_CFLAGS="-I$abs_tiffdir/libtiff $COMP_VENDOR_CFLAGS"
COMP_VENDOR_LDFLAGS="-L$abs_tiffdir/libtiff $COMP_VENDOR_LDFLAGS" COMP_VENDOR_LDFLAGS="-L$abs_tiffdir/libtiff $COMP_VENDOR_LDFLAGS"
@ -527,8 +527,18 @@ if test "$enable_builtin_tiff" = "yes" ; then
AC_DEFINE([HAVE_LIBTIFF], [1], [Define to 1 if you have the `tiff' library (-ltiff).]) AC_DEFINE([HAVE_LIBTIFF], [1], [Define to 1 if you have the `tiff' library (-ltiff).])
else else
AC_CHECK_HEADERS([tiffio.h]) AC_CHECK_HEADERS([tiffio.h])
AC_CHECK_HEADERS([tif_dir.h], [], [], [#include <tiffio.h>
])
AC_CHECK_LIB([tiff], [TIFFOpen], [TIFF_LIBS="-ltiff"], AC_MSG_ERROR("Cannot build without libtiff (does your system require a libtiff-devel package?)"), -lm) AC_CHECK_LIB([tiff], [TIFFOpen], [TIFF_LIBS="-ltiff"], AC_MSG_ERROR("Cannot build without libtiff (does your system require a libtiff-devel package?)"), -lm)
fi fi
if test "$ac_cv_header_tif_dir_h" = "yes" ; then
AC_DEFINE([SPANDSP_SUPPORT_TIFF_FX], [1], [Support TIFF/FX in TIFF file handling])
SPANDSP_SUPPORT_TIFF_FX="#define SPANDSP_SUPPORT_TIFF_FX"
else
SPANDSP_SUPPORT_TIFF_FX="#undef SPANDSP_SUPPORT_TIFF_FX"
fi
AC_CHECK_HEADERS([jpeglib.h]) AC_CHECK_HEADERS([jpeglib.h])
AC_CHECK_LIB([jpeg], [jpeg_start_compress], [JPEG_LIBS="-ljpeg"]) AC_CHECK_LIB([jpeg], [jpeg_start_compress], [JPEG_LIBS="-ljpeg"])
@ -551,6 +561,7 @@ AC_SUBST(SPANDSP_USE_EXPORT_CAPABILITY)
AC_SUBST(SPANDSP_SUPPORT_T42) AC_SUBST(SPANDSP_SUPPORT_T42)
AC_SUBST(SPANDSP_SUPPORT_T43) AC_SUBST(SPANDSP_SUPPORT_T43)
AC_SUBST(SPANDSP_SUPPORT_V34) AC_SUBST(SPANDSP_SUPPORT_V34)
AC_SUBST(SPANDSP_SUPPORT_TIFF_FX)
AC_SUBST(INSERT_INTTYPES_HEADER) AC_SUBST(INSERT_INTTYPES_HEADER)
AC_SUBST(INSERT_STDINT_HEADER) AC_SUBST(INSERT_STDINT_HEADER)
AC_SUBST(INSERT_TGMATH_HEADER) AC_SUBST(INSERT_TGMATH_HEADER)

View File

@ -36,6 +36,7 @@
@SPANDSP_SUPPORT_T42@ @SPANDSP_SUPPORT_T42@
@SPANDSP_SUPPORT_T43@ @SPANDSP_SUPPORT_T43@
@SPANDSP_SUPPORT_V34@ @SPANDSP_SUPPORT_V34@
@SPANDSP_SUPPORT_TIFF_FX@
#include <stdlib.h> #include <stdlib.h>
@INSERT_INTTYPES_HEADER@ @INSERT_INTTYPES_HEADER@

View File

@ -28,8 +28,6 @@
#if !defined(_SPANDSP_T4_TX_H_) #if !defined(_SPANDSP_T4_TX_H_)
#define _SPANDSP_T4_TX_H_ #define _SPANDSP_T4_TX_H_
#define SPANDSP_SUPPORT_TIFF_FX
/*! This function is a callback from the image decoders, to read the unencoded bi-level image, /*! This function is a callback from the image decoders, to read the unencoded bi-level image,
row by row. It is called for each row, with len set to the number of bytes per row expected. row by row. It is called for each row, with len set to the number of bytes per row expected.
\return len for OK, or zero to indicate the end of the image data. */ \return len for OK, or zero to indicate the end of the image data. */
@ -41,8 +39,7 @@ typedef int (*t4_row_read_handler_t)(void *user_data, uint8_t buf[], size_t len)
*/ */
typedef struct t4_tx_state_s t4_tx_state_t; typedef struct t4_tx_state_s t4_tx_state_t;
#if defined(SPANDSP_SUPPORT_TIFF_FX) /* TIFF-FX related extensions to the TIFF tag set */
/* TIFF-FX related extensions to the tag set supported by libtiff */
/* /*
Indexed(346) = 0, 1. SHORT Indexed(346) = 0, 1. SHORT
@ -55,7 +52,7 @@ Indexed(346) = 0, 1. SHORT
profile supports palette-color images with the ITULAB encoding. profile supports palette-color images with the ITULAB encoding.
The SamplesPerPixel value must be 1. The SamplesPerPixel value must be 1.
GlobalParametersIFD (400) IFD GlobalParametersIFD (400) IFD/LONG
An IFD containing global parameters. It is recommended that a TIFF An IFD containing global parameters. It is recommended that a TIFF
writer place this field in the first IFD, where a TIFF reader would writer place this field in the first IFD, where a TIFF reader would
find it quickly. find it quickly.
@ -177,6 +174,9 @@ ImageLayer(34732) LONG
3: ... 3: ...
*/ */
/* Define the TIFF/FX tags to extend libtiff, when using a version of libtiff where this
stuff has not been merged. */
#if defined(SPANDSP_SUPPORT_TIFF_FX) && !defined(TIFFTAG_FAXPROFILE)
#define TIFFTAG_INDEXED 346 #define TIFFTAG_INDEXED 346
#define TIFFTAG_GLOBALPARAMETERSIFD 400 #define TIFFTAG_GLOBALPARAMETERSIFD 400
#define TIFFTAG_PROFILETYPE 401 #define TIFFTAG_PROFILETYPE 401

View File

@ -79,15 +79,15 @@
#include "faxfont.h" #include "faxfont.h"
#if 0
#if defined(SPANDSP_SUPPORT_TIFF_FX) #if defined(SPANDSP_SUPPORT_TIFF_FX)
#include <tif_dir.h> #include <tif_dir.h>
#endif #endif
#endif
/*! The number of centimetres in one inch */ /*! The number of centimetres in one inch */
#define CM_PER_INCH 2.54f #define CM_PER_INCH 2.54f
static void t4_tx_set_image_length(t4_tx_state_t *s, int image_length);
#if defined(SPANDSP_SUPPORT_TIFF_FX) #if defined(SPANDSP_SUPPORT_TIFF_FX)
/* TIFF-FX related extensions to the tag set supported by libtiff */ /* TIFF-FX related extensions to the tag set supported by libtiff */
static const TIFFFieldInfo tiff_fx_tiff_field_info[] = static const TIFFFieldInfo tiff_fx_tiff_field_info[] =
@ -126,8 +126,6 @@ static TIFFField tiff_fx_tiff_fields[] =
TIFFFieldArray tiff_fx_field_array = { tfiatOther, 0, 12, tiff_fx_tiff_fields }; TIFFFieldArray tiff_fx_field_array = { tfiatOther, 0, 12, tiff_fx_tiff_fields };
#endif #endif
static void t4_tx_set_image_length(t4_tx_state_t *s, int image_length);
static TIFFExtendProc _ParentExtender = NULL; static TIFFExtendProc _ParentExtender = NULL;
static void TIFFFXDefaultDirectory(TIFF *tif) static void TIFFFXDefaultDirectory(TIFF *tif)
@ -164,6 +162,7 @@ static int test_resolution(int res_unit, float actual, float expected)
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
#if defined(SPANDSP_SUPPORT_TIFF_FX)
static int read_colour_map(t4_tx_state_t *s, int bits_per_sample) static int read_colour_map(t4_tx_state_t *s, int bits_per_sample)
{ {
int i; int i;
@ -187,7 +186,7 @@ static int read_colour_map(t4_tx_state_t *s, int bits_per_sample)
/* Sweep the colormap in the proper order */ /* Sweep the colormap in the proper order */
for (i = 0; i < (1 << bits_per_sample); i++) for (i = 0; i < (1 << bits_per_sample); i++)
{ {
s->colour_map[3*i] = (map_L[i] >> 8) & 0xFF; s->colour_map[3*i + 0] = (map_L[i] >> 8) & 0xFF;
s->colour_map[3*i + 1] = (map_a[i] >> 8) & 0xFF; s->colour_map[3*i + 1] = (map_a[i] >> 8) & 0xFF;
s->colour_map[3*i + 2] = (map_b[i] >> 8) & 0xFF; s->colour_map[3*i + 2] = (map_b[i] >> 8) & 0xFF;
span_log(&s->logging, SPAN_LOG_FLOW, "Map %3d - %5d %5d %5d\n", i, s->colour_map[3*i], s->colour_map[3*i + 1], s->colour_map[3*i + 2]); span_log(&s->logging, SPAN_LOG_FLOW, "Map %3d - %5d %5d %5d\n", i, s->colour_map[3*i], s->colour_map[3*i + 1], s->colour_map[3*i + 2]);
@ -196,8 +195,8 @@ static int read_colour_map(t4_tx_state_t *s, int bits_per_sample)
/* Sweep the colormap in the order that seems to work for l04x_02x.tif */ /* Sweep the colormap in the order that seems to work for l04x_02x.tif */
for (i = 0; i < (1 << bits_per_sample); i++) for (i = 0; i < (1 << bits_per_sample); i++)
{ {
s->colour_map[i] = (map_L[i] >> 8) & 0xFF; s->colour_map[0*256 + i] = (map_L[i] >> 8) & 0xFF;
s->colour_map[256 + i] = (map_a[i] >> 8) & 0xFF; s->colour_map[1*256 + i] = (map_a[i] >> 8) & 0xFF;
s->colour_map[2*256 + i] = (map_b[i] >> 8) & 0xFF; s->colour_map[2*256 + i] = (map_b[i] >> 8) & 0xFF;
} }
#endif #endif
@ -207,6 +206,7 @@ static int read_colour_map(t4_tx_state_t *s, int bits_per_sample)
return 0; return 0;
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
#endif
static int get_tiff_directory_info(t4_tx_state_t *s) static int get_tiff_directory_info(t4_tx_state_t *s)
{ {
@ -240,6 +240,7 @@ static int get_tiff_directory_info(t4_tx_state_t *s)
{1200.0f/CM_PER_INCH, T4_Y_RESOLUTION_1200}, {1200.0f/CM_PER_INCH, T4_Y_RESOLUTION_1200},
{ -1.00f, -1} { -1.00f, -1}
}; };
#if defined(SPANDSP_SUPPORT_TIFF_FX)
static const char *tiff_fx_fax_profiles[] = static const char *tiff_fx_fax_profiles[] =
{ {
"???", "???",
@ -250,18 +251,19 @@ static int get_tiff_directory_info(t4_tx_state_t *s)
"profile L", "profile L",
"profile M" "profile M"
}; };
uint16_t res_unit;
uint8_t parm8;
uint16_t parm16;
uint32_t parm32;
char *u; char *u;
char uu[10]; char uu[10];
uint8_t parm8;
uint16_t parm16;
#endif
uint32_t parm32;
float x_resolution; float x_resolution;
float y_resolution; float y_resolution;
int i; int i;
t4_tx_tiff_state_t *t; t4_tx_tiff_state_t *t;
uint16_t bits_per_sample; uint16_t bits_per_sample;
uint16_t samples_per_pixel; uint16_t samples_per_pixel;
uint16_t res_unit;
t = &s->tiff; t = &s->tiff;
bits_per_sample = 1; bits_per_sample = 1;