]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Some tweaks to spandsp tests. Make spandsp write TIFF files more like the
authorSteve Underwood <steveu@x100e.coppice.org>
Thu, 6 Sep 2012 16:41:41 +0000 (00:41 +0800)
committerSteve Underwood <steveu@x100e.coppice.org>
Thu, 6 Sep 2012 16:41:41 +0000 (00:41 +0800)
TIFF/FX spec says, even though no software seems to care.

libs/spandsp/src/t31.c
libs/spandsp/src/t4_rx.c
libs/spandsp/test-data/etsi/fax/generate_etsi_300_242_pages.c
libs/spandsp/test-data/itu/fax/generate_dithered_tif.c
libs/spandsp/test-data/itu/fax/generate_sized_pages.c
libs/spandsp/test-data/itu/fax/generate_striped_pages.c
libs/spandsp/tests/t42_tests.c

index 8e747c4d0f2e56dd2e1d6ebcd95f8bc50f49a1a7..01d948e357bf1b02c8a2ae5ae1fdebd93377ee2d 100644 (file)
@@ -1689,6 +1689,16 @@ static int restart_modem(t31_state_t *s, int new_modem)
         }
         s->at_state.transmit = TRUE;
         break;
+    case FAX_MODEM_V21_RX:
+        if (s->t38_mode)
+        {
+        }
+        else
+        {
+            t31_v21_rx(s);
+            fax_modems_set_rx_handler(t, (span_rx_handler_t) &fsk_rx, &t->v21_rx, (span_rx_fillin_handler_t) &fsk_rx_fillin, &t->v21_rx);
+        }
+        break;
     case FAX_MODEM_V21_TX:
         if (s->t38_mode)
         {
@@ -1712,15 +1722,16 @@ static int restart_modem(t31_state_t *s, int new_modem)
         s->dled = FALSE;
         s->at_state.transmit = TRUE;
         break;
-    case FAX_MODEM_V21_RX:
-        if (s->t38_mode)
-        {
-        }
-        else
+    case FAX_MODEM_V17_RX:
+    case FAX_MODEM_V27TER_RX:
+    case FAX_MODEM_V29_RX:
+        if (!s->t38_mode)
         {
+            fax_modems_start_fast_modem(t, s->modem, s->bit_rate, s->short_train, use_hdlc);
+            /* Allow for +FCERROR/+FRH:3 */
             t31_v21_rx(s);
-            fax_modems_set_rx_handler(t, (span_rx_handler_t) &fsk_rx, &t->v21_rx, (span_rx_fillin_handler_t) &fsk_rx_fillin, &t->v21_rx);
         }
+        s->at_state.transmit = FALSE;
         break;
     case FAX_MODEM_V17_TX:
         if (s->t38_mode)
@@ -1755,17 +1766,6 @@ static int restart_modem(t31_state_t *s, int new_modem)
         s->tx.data_started = FALSE;
         s->at_state.transmit = TRUE;
         break;
-    case FAX_MODEM_V17_RX:
-    case FAX_MODEM_V27TER_RX:
-    case FAX_MODEM_V29_RX:
-        if (!s->t38_mode)
-        {
-            fax_modems_start_fast_modem(t, s->modem, s->bit_rate, s->short_train, use_hdlc);
-            /* Allow for +FCERROR/+FRH:3 */
-            t31_v21_rx(s);
-        }
-        s->at_state.transmit = FALSE;
-        break;
     case FAX_MODEM_V27TER_TX:
         if (s->t38_mode)
         {
index f3b34167b220feef992c8154ca86921ceccf5418..c17c377630215f3ec82c430a975627c6019cfe59 100644 (file)
@@ -172,7 +172,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
     }
 #if defined(SPANDSP_SUPPORT_TIFF_FX)
     TIFFSetField(t->tiff_file, TIFFTAG_PROFILETYPE, PROFILETYPE_G3_FAX);
-    TIFFSetField(t->tiff_file, TIFFTAG_FAXPROFILE, FAXPROFILE_S);
+    TIFFSetField(t->tiff_file, TIFFTAG_FAXPROFILE, FAXPROFILE_F);
     TIFFSetField(t->tiff_file, TIFFTAG_CODINGMETHODS, CODINGMETHODS_T4_1D | CODINGMETHODS_T4_2D | CODINGMETHODS_T6);
     TIFFSetField(t->tiff_file, TIFFTAG_VERSIONYEAR, "1998");
     /* TIFFSetField(t->tiff_file, TIFFTAG_MODENUMBER, 0); */
@@ -304,10 +304,14 @@ static int write_tiff_image(t4_rx_state_t *s)
         return -1;
     /* Set up the TIFF directory info... */
     set_tiff_directory_info(s);
-    /* ...and then write the image... */
+    /* ...Put the directory in the file before the image data, to get them in the order specified
+       for TIFF/F files... */
+    if (!TIFFCheckpointDirectory(t->tiff_file))
+        span_log(&s->logging, SPAN_LOG_WARNING, "%s: Failed to checkpoint directory for page %d.\n", t->file, s->current_page);
+    /* ...and write out the image... */
     if (TIFFWriteEncodedStrip(t->tiff_file, 0, t->image_buffer, t->image_size) < 0)
         span_log(&s->logging, SPAN_LOG_WARNING, "%s: Error writing TIFF strip.\n", t->file);
-    /* ...then the directory entry, and libtiff is happy. */
+    /* ...then finalise the directory entry, and libtiff is happy. */
     if (!TIFFWriteDirectory(t->tiff_file))
         span_log(&s->logging, SPAN_LOG_WARNING, "%s: Failed to write directory for page %d.\n", t->file, s->current_page);
 #if defined(SPANDSP_SUPPORT_TIFF_FX)
@@ -316,7 +320,7 @@ static int write_tiff_image(t4_rx_state_t *s)
         if (!TIFFCreateCustomDirectory(t->tiff_file, &tiff_fx_field_array))
         {
             TIFFSetField(t->tiff_file, TIFFTAG_FAXPROFILE, PROFILETYPE_G3_FAX);
-            TIFFSetField(t->tiff_file, TIFFTAG_PROFILETYPE, FAXPROFILE_S);
+            TIFFSetField(t->tiff_file, TIFFTAG_PROFILETYPE, FAXPROFILE_F);
             TIFFSetField(t->tiff_file, TIFFTAG_VERSIONYEAR, "1998");
 
             offset = 0;
index dda0d0fbc78c218e88a4bb5eca13da20d0fc2bdb..9a2a3e971e53bba21386b95a708f5ce83161cb51 100644 (file)
@@ -623,6 +623,10 @@ int main(int argc, char *argv[])
                 tm->tm_sec);
         TIFFSetField(tiff_file, TIFFTAG_DATETIME, buf);
         image_length = sequence[i].length;
+        TIFFSetField(tiff_file, TIFFTAG_PAGENUMBER, 0, 1);
+        TIFFSetField(tiff_file, TIFFTAG_CLEANFAXDATA, CLEANFAXDATA_CLEAN);
+        TIFFSetField(tiff_file, TIFFTAG_IMAGELENGTH, image_length);
+        TIFFCheckpointDirectory(tiff_file);
         
         /* Write the image first.... */
         switch (sequence[i].type)
@@ -662,8 +666,6 @@ int main(int argc, char *argv[])
         }
         /* ....then the directory entry, and libtiff is happy. */
         TIFFSetField(tiff_file, TIFFTAG_IMAGELENGTH, image_length);
-        TIFFSetField(tiff_file, TIFFTAG_PAGENUMBER, 0, 1);
-        TIFFSetField(tiff_file, TIFFTAG_CLEANFAXDATA, CLEANFAXDATA_CLEAN);
 
         TIFFWriteDirectory(tiff_file);
     }
index 31c8cb0cc8aa1bb73a6880ccda99f6f15f30465d..03ae0e8602a66214085af2dba921f14afe3d71db 100644 (file)
@@ -137,6 +137,7 @@ int main(int argc, char *argv[])
     TIFFSetField(tiff_file, TIFFTAG_PAGENUMBER, 0, 1);
     TIFFSetField(tiff_file, TIFFTAG_CLEANFAXDATA, CLEANFAXDATA_CLEAN);
     TIFFSetField(tiff_file, TIFFTAG_IMAGEWIDTH, image_width);
+    TIFFCheckpointDirectory(tiff_file);
 
     /* Write the image first.... */
     for (row = 0;  row < image_length;  row++)
index bd7e8cdc910acfae5b4fb63f5f4bc429af479a20..a075f622e544cc2fd3a744168c835a257712660f 100644 (file)
@@ -367,6 +367,7 @@ int main(int argc, char *argv[])
         TIFFSetField(tiff_file, TIFFTAG_PAGENUMBER, 0, 1);
         TIFFSetField(tiff_file, TIFFTAG_CLEANFAXDATA, CLEANFAXDATA_CLEAN);
         TIFFSetField(tiff_file, TIFFTAG_IMAGEWIDTH, sequence[i].width);
+        TIFFCheckpointDirectory(tiff_file);
 
         /* Write the image first.... */
         for (row = 0;  row < sequence[i].length;  row++)
index 0c3eafd149df7d62eda0215ab5c03a1f7bf6524d..63b8e755c7eebcb8324597b6ea7f3631e7bd7291 100644 (file)
@@ -103,6 +103,7 @@ int main(int argc, char *argv[])
     TIFFSetField(tiff_file, TIFFTAG_IMAGEWIDTH, IMAGE_WIDTH);
     TIFFSetField(tiff_file, TIFFTAG_IMAGELENGTH, IMAGE_LENGTH);
     TIFFSetField(tiff_file, TIFFTAG_PAGENUMBER, 0, 1);
+    TIFFCheckpointDirectory(tiff_file);
 
     image_size = IMAGE_WIDTH*ROWS_PER_STRIPE/8;
     memset(image_buffer, 0x18, image_size);
index 588bfdd3fe957005c5426b649ad95a8c126306af..8cddaa18cd1bc43f25c6bd8964ad24e835d57262 100644 (file)
@@ -46,7 +46,7 @@
 #include "spandsp.h"
 
 #if defined(SPANDSP_SUPPORT_TIFF_FX)
-//#include <tif_dir.h>
+#include <tif_dir.h>
 #endif
 
 //#define IN_FILE_NAME    "../test-data/itu/t24/F21_200.TIF"
@@ -156,7 +156,9 @@ int main(int argc, char *argv[])
 
     logging = span_log_init(NULL, SPAN_LOG_FLOW, "T.42");
 
+#if defined(SPANDSP_SUPPORT_TIFF_FX)
     TIFF_FX_init();
+#endif
 
     set_lab_illuminant(&lab_param, 0.9638f, 1.0f, 0.8245f);
     set_lab_gamut(&lab_param, 0, 100, -85, 85, -75, 125, FALSE);
@@ -189,7 +191,7 @@ int main(int argc, char *argv[])
     YCbCrSubsampleHoriz = 0;
     YCbCrSubsampleVert = 0;
     TIFFGetField(tif, TIFFTAG_YCBCRSUBSAMPLING, &YCbCrSubsampleHoriz, &YCbCrSubsampleVert);
-    planar_config = 0;
+    planar_config = PLANARCONFIG_CONTIG;
     TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &planar_config);
     off = 0;