spandsp  0.0.6
t4_tx.c File Reference
#include <stdlib.h>
#include <inttypes.h>
#include <limits.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <memory.h>
#include <string.h>
#include "floating_fudge.h"
#include <tiffio.h>
#include "spandsp/telephony.h"
#include "spandsp/logging.h"
#include "spandsp/bit_operations.h"
#include "spandsp/async.h"
#include "spandsp/timezone.h"
#include "spandsp/t4_rx.h"
#include "spandsp/t4_tx.h"
#include "spandsp/t4_t6_decode.h"
#include "spandsp/t4_t6_encode.h"
#include "spandsp/private/logging.h"
#include "spandsp/private/t4_t6_decode.h"
#include "spandsp/private/t4_t6_encode.h"
#include "spandsp/private/t4_rx.h"
#include "spandsp/private/t4_tx.h"
#include "faxfont.h"

Classes

struct  t4_run_table_entry_t
 

Macros

#define CM_PER_INCH   2.54f
 
#define EOLS_TO_END_T4_TX_PAGE   6
 
#define EOLS_TO_END_T6_TX_PAGE   2
 
#define STATE_TRACE(...)
 
#define pixel_is_black(x, bit)   (((x)[(bit) >> 3] << ((bit) & 7)) & 0x80)
 

Functions

int t4_tx_set_row_read_handler (t4_tx_state_t *s, t4_row_read_handler_t handler, void *user_data)
 Set the row read handler for a T.4 transmit context. More...
 
int t4_tx_start_page (t4_tx_state_t *s)
 Prepare to send the next page of the current document. More...
 
int t4_tx_next_page_has_different_format (t4_tx_state_t *s)
 Check for the existance of the next page, and whether its format is like the current one. This information can be needed before it is determined that the current page is finished with. More...
 
int t4_tx_restart_page (t4_tx_state_t *s)
 Prepare the current page for a resend. More...
 
int t4_tx_end_page (t4_tx_state_t *s)
 Complete the sending of a page. More...
 
int t4_tx_get_bit (t4_tx_state_t *s)
 Get the next bit of the current document page. The document will be padded for the current minimum scan line time. More...
 
int t4_tx_get_byte (t4_tx_state_t *s)
 Get the next byte of the current document page. The document will be padded for the current minimum scan line time. More...
 
int t4_tx_get_chunk (t4_tx_state_t *s, uint8_t buf[], int max_len)
 Get the next chunk of the current document page. The document will be padded for the current minimum scan line time. More...
 
int t4_tx_check_bit (t4_tx_state_t *s)
 Return the next bit of the current document page, without actually moving forward in the buffer. The document will be padded for the current minimum scan line time. More...
 
void t4_tx_set_tx_encoding (t4_tx_state_t *s, int encoding)
 Set the encoding for the encoded data. More...
 
void t4_tx_set_min_bits_per_row (t4_tx_state_t *s, int bits)
 Set the minimum number of encoded bits per row. This allows the makes the encoding process to be set to comply with the minimum row time specified by a remote receiving machine. More...
 
void t4_tx_set_local_ident (t4_tx_state_t *s, const char *ident)
 Set the identity of the local machine, for inclusion in page headers. More...
 
void t4_tx_set_header_info (t4_tx_state_t *s, const char *info)
 Set the header info. More...
 
void t4_tx_set_header_tz (t4_tx_state_t *s, struct tz_s *tz)
 Set the header timezone. More...
 
int t4_tx_get_y_resolution (t4_tx_state_t *s)
 Get the row-to-row (y) resolution of the current page. More...
 
int t4_tx_get_x_resolution (t4_tx_state_t *s)
 Get the column-to-column (x) resolution of the current page. More...
 
int t4_tx_get_image_width (t4_tx_state_t *s)
 Get the width of the current page, in pixel columns. More...
 
int t4_tx_get_pages_in_file (t4_tx_state_t *s)
 Get the number of pages in the file. More...
 
int t4_tx_get_current_page_in_file (t4_tx_state_t *s)
 Get the currnet page number in the file. More...
 
void t4_tx_get_transfer_statistics (t4_tx_state_t *s, t4_stats_t *t)
 Get the current transfer statistics. More...
 
t4_tx_state_tt4_tx_init (t4_tx_state_t *s, const char *file, int start_page, int stop_page)
 Prepare for transmission of a document. More...
 
int t4_tx_release (t4_tx_state_t *s)
 End the transmission of a document. Tidy up and close the file. This should be used to end T.4 transmission started with t4_tx_init. More...
 
int t4_tx_free (t4_tx_state_t *s)
 End the transmission of a document. Tidy up, close the file and free the context. This should be used to end T.4 transmission started with t4_tx_init. More...
 

Macro Definition Documentation

◆ CM_PER_INCH

#define CM_PER_INCH   2.54f

The number of centimetres in one inch

◆ EOLS_TO_END_T4_TX_PAGE

#define EOLS_TO_END_T4_TX_PAGE   6

The number of EOLs to be sent at the end of a T.4 page

◆ EOLS_TO_END_T6_TX_PAGE

#define EOLS_TO_END_T6_TX_PAGE   2

The number of EOLs to be sent at the end of a T.6 page

Function Documentation

◆ t4_tx_check_bit()

int t4_tx_check_bit ( t4_tx_state_t s)

Return the next bit of the current document page, without actually moving forward in the buffer. The document will be padded for the current minimum scan line time.

Parameters
sThe T.4 context.
Returns
The next bit (i.e. 0 or 1). For the last bit of data, bit 1 is set (i.e. the returned value is 2 or 3).

◆ t4_tx_end_page()

int t4_tx_end_page ( t4_tx_state_t s)

Complete the sending of a page.

Parameters
sThe T.4 context.
Returns
zero for success, -1 for failure.

References t4_state_s::current_page.

◆ t4_tx_free()

int t4_tx_free ( t4_tx_state_t s)

End the transmission of a document. Tidy up, close the file and free the context. This should be used to end T.4 transmission started with t4_tx_init.

Parameters
sThe T.4 context.
Returns
0 for success, otherwise -1.

References t4_tx_release().

◆ t4_tx_get_bit()

int t4_tx_get_bit ( t4_tx_state_t s)

Get the next bit of the current document page. The document will be padded for the current minimum scan line time.

Parameters
sThe T.4 context.
Returns
The next bit (i.e. 0 or 1). For the last bit of data, bit 1 is set (i.e. the returned value is 2 or 3).

◆ t4_tx_get_byte()

int t4_tx_get_byte ( t4_tx_state_t s)

Get the next byte of the current document page. The document will be padded for the current minimum scan line time.

Parameters
sThe T.4 context.
Returns
The next byte. For the last byte of data, bit 8 is set. In this case, one or more bits of the byte may be padded with zeros, to complete the byte.

References t4_t6_encode_state_s::bit_ptr, t4_state_s::image_buffer, and t4_state_s::image_size.

◆ t4_tx_get_chunk()

int t4_tx_get_chunk ( t4_tx_state_t s,
uint8_t  buf[],
int  max_len 
)

Get the next chunk of the current document page. The document will be padded for the current minimum scan line time.

Parameters
sThe T.4 context.
bufThe buffer into which the chunk is to written.
max_lenThe maximum length of the chunk.
Returns
The actual length of the chunk. If this is less than max_len it indicates that the end of the document has been reached.

◆ t4_tx_get_current_page_in_file()

int t4_tx_get_current_page_in_file ( t4_tx_state_t s)

Get the currnet page number in the file.

Parameters
sThe T.4 context.
Returns
The page number, or -1 if there is an error.

References t4_state_s::current_page.

◆ t4_tx_get_image_width()

int t4_tx_get_image_width ( t4_tx_state_t s)

Get the width of the current page, in pixel columns.

Parameters
sThe T.4 context.
Returns
The number of columns.

References t4_state_s::image_width.

◆ t4_tx_get_pages_in_file()

int t4_tx_get_pages_in_file ( t4_tx_state_t s)

Get the number of pages in the file.

Parameters
sThe T.4 context.
Returns
The number of pages, or -1 if there is an error.

References t4_t6_encode_state_s::row_read_handler.

◆ t4_tx_get_transfer_statistics()

◆ t4_tx_get_x_resolution()

int t4_tx_get_x_resolution ( t4_tx_state_t s)

Get the column-to-column (x) resolution of the current page.

Parameters
sThe T.4 context.
Returns
The resolution, in pixels per metre.

References t4_state_s::x_resolution.

◆ t4_tx_get_y_resolution()

int t4_tx_get_y_resolution ( t4_tx_state_t s)

Get the row-to-row (y) resolution of the current page.

Parameters
sThe T.4 context.
Returns
The resolution, in pixels per metre.

References t4_state_s::y_resolution.

◆ t4_tx_init()

t4_tx_state_t* t4_tx_init ( t4_tx_state_t s,
const char *  file,
int  start_page,
int  stop_page 
)

Prepare for transmission of a document.

Parameters
sThe T.4 context.
fileThe name of the file to be sent.
start_pageThe first page to send. -1 for no restriction.
stop_pageThe last page to send. -1 for no restriction.
Returns
A pointer to the context, or NULL if there was a problem.

◆ t4_tx_next_page_has_different_format()

int t4_tx_next_page_has_different_format ( t4_tx_state_t s)

Check for the existance of the next page, and whether its format is like the current one. This information can be needed before it is determined that the current page is finished with.

Parameters
sThe T.4 context.
Returns
0 for next page found with the same format as the current page. 1 for next page found with different format from the current page. -1 for no page found, or file failure.

References t4_state_s::logging, and span_log().

◆ t4_tx_release()

int t4_tx_release ( t4_tx_state_t s)

End the transmission of a document. Tidy up and close the file. This should be used to end T.4 transmission started with t4_tx_init.

Parameters
sThe T.4 context.
Returns
0 for success, otherwise -1.

References t4_state_s::rx, t4_state_s::tiff, and t4_tiff_state_t::tiff_file.

Referenced by t4_tx_free().

◆ t4_tx_restart_page()

int t4_tx_restart_page ( t4_tx_state_t s)

Prepare the current page for a resend.

Parameters
sThe T.4 context.
Returns
zero for success, -1 for failure.

References t4_t6_encode_state_s::bit_pos, and t4_t6_encode_state_s::bit_ptr.

◆ t4_tx_set_header_info()

void t4_tx_set_header_info ( t4_tx_state_t s,
const char *  info 
)

Set the header info.

Set the info field, included in the header line included in each page of an encoded FAX. This is a string of up to 50 characters. Other information (date, local ident, etc.) are automatically included in the header. If the header info is set to NULL or a zero length string, no header lines will be added to the encoded FAX.

Parameters
sThe T.4 context.
infoA string, of up to 50 bytes, which will form the info field.

References t4_state_s::header_info.

◆ t4_tx_set_header_tz()

void t4_tx_set_header_tz ( t4_tx_state_t s,
tz_t tz 
)

Set the header timezone.

Set the time zone for the time stamp in page header lines. If this function is not used the current time zone of the program's environment is used.

Parameters
sThe T.4 context.
tzA time zone descriptor.

References t4_state_s::tz.

◆ t4_tx_set_local_ident()

void t4_tx_set_local_ident ( t4_tx_state_t s,
const char *  ident 
)

Set the identity of the local machine, for inclusion in page headers.

Parameters
sThe T.4 context.
identThe identity string.

References t4_rx_metadata_t::local_ident, and t4_state_s::tiff.

◆ t4_tx_set_min_bits_per_row()

void t4_tx_set_min_bits_per_row ( t4_tx_state_t s,
int  bits 
)

Set the minimum number of encoded bits per row. This allows the makes the encoding process to be set to comply with the minimum row time specified by a remote receiving machine.

Parameters
sThe T.4 context.
bitsThe minimum number of bits per row.

◆ t4_tx_set_row_read_handler()

int t4_tx_set_row_read_handler ( t4_tx_state_t s,
t4_row_read_handler_t  handler,
void *  user_data 
)

Set the row read handler for a T.4 transmit context.

Parameters
sThe T.4 transmit context.
handlerA pointer to the handler routine.
user_dataAn opaque pointer passed to the handler routine.
Returns
0 for success, otherwise -1.

References t4_t6_encode_state_s::row_read_handler, and t4_t6_encode_state_s::row_read_user_data.

◆ t4_tx_set_tx_encoding()

void t4_tx_set_tx_encoding ( t4_tx_state_t s,
int  encoding 
)

Set the encoding for the encoded data.

Parameters
sThe T.4 context.
encodingThe encoding.

References t4_state_s::line_encoding, t4_t6_encode_state_s::max_rows_to_next_1d_row, t4_state_s::row_is_2d, and t4_t6_encode_state_s::rows_to_next_1d_row.

◆ t4_tx_start_page()

int t4_tx_start_page ( t4_tx_state_t s)

Prepare to send the next page of the current document.

Parameters
sThe T.4 context.
Returns
zero for success, -1 for failure.