#include <stdio.h>
#include <inttypes.h>
#include <limits.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>
#include <string.h>
#include <tiffio.h>
#include "spandsp/telephony.h"
#include "spandsp/logging.h"
#include "spandsp/bit_operations.h"
#include "spandsp/async.h"
#include "spandsp/t4.h"
#include "faxfont.h"
#include "t4states.h"
Classes | |
struct | T4_tab_entry |
struct | T4_table_entry |
Defines | |
#define | _GNU_SOURCE |
#define | S_Null 0 |
#define | S_Pass 1 |
#define | S_Horiz 2 |
#define | S_V0 3 |
#define | S_VR 4 |
#define | S_VL 5 |
#define | S_Ext 6 |
#define | S_TermW 7 |
#define | S_TermB 8 |
#define | S_MakeUpW 9 |
#define | S_MakeUpB 10 |
#define | S_MakeUp 11 |
#define | S_EOL 12 |
#define | STATE_TRACE(...) |
#define | is_aligned(p, t) ((((intptr_t)(p)) & (sizeof(t) - 1)) == 0) |
#define | T4CODE_EOL -1 |
#define | T4CODE_INVALID -2 |
#define | T4CODE_EOF -3 |
#define | T4CODE_INCOMP -4 |
Functions | |
int | t4_rx_end_page (t4_state_t *s) |
Complete the reception of a page. | |
int | t4_rx_put_bit (t4_state_t *s, int bit) |
Put a bit of the current document page. | |
int | t4_rx_put_byte (t4_state_t *s, uint8_t byte) |
Put a byte of the current document page. | |
int | t4_rx_put_chunk (t4_state_t *s, const uint8_t buf[], int len) |
Put a byte of the current document page. | |
t4_state_t * | t4_rx_create (const char *file, int output_encoding) |
Allocate a T.4 transmit handling context, and initialise it. | |
int | t4_rx_init (t4_state_t *s, const char *file, int output_encoding) |
Prepare for reception of a document. | |
int | t4_rx_start_page (t4_state_t *s) |
Prepare to receive the next page of the current document. | |
int | t4_rx_delete (t4_state_t *s) |
End reception of a document. Tidy up, close the file and free the context. This should be used to end T.4 reception started with t4_rx_create. | |
int | t4_rx_end (t4_state_t *s) |
End reception of a document. Tidy up and close the file. This should be used to end T.4 reception started with t4_rx_init. | |
void | t4_rx_set_rx_encoding (t4_state_t *s, int encoding) |
Set the encoding for the received data. | |
void | t4_rx_set_image_width (t4_state_t *s, int width) |
Set the expected width of the received image, in pixel columns. | |
void | t4_rx_set_y_resolution (t4_state_t *s, int resolution) |
Set the row-to-row (y) resolution to expect for a received image. | |
void | t4_rx_set_x_resolution (t4_state_t *s, int resolution) |
Set the column-to-column (x) resolution to expect for a received image. | |
void | t4_rx_set_sub_address (t4_state_t *s, const char *sub_address) |
Set the sub-address of the fax, for inclusion in the file. | |
void | t4_rx_set_far_ident (t4_state_t *s, const char *ident) |
Set the identity of the remote machine, for inclusion in the file. | |
void | t4_rx_set_vendor (t4_state_t *s, const char *vendor) |
Set the vendor of the remote machine, for inclusion in the file. | |
void | t4_rx_set_model (t4_state_t *s, const char *model) |
Set the model of the remote machine, for inclusion in the file. | |
t4_state_t * | t4_tx_create (const char *file, int start_page, int stop_page) |
Allocate a T.4 receive handling context, and initialise it. | |
int | t4_tx_init (t4_state_t *s, const char *file, int start_page, int stop_page) |
Prepare for transmission of a document. | |
int | t4_tx_start_page (t4_state_t *s) |
Prepare to send the next page of the current document. | |
int | t4_tx_more_pages (t4_state_t *s) |
Check for the existance of the next page. This information can be needed before it is determined that the current page is finished with. | |
int | t4_tx_restart_page (t4_state_t *s) |
Prepare the current page for a resend. | |
int | t4_tx_end_page (t4_state_t *s) |
Complete the sending of a page. | |
int | t4_tx_get_bit (t4_state_t *s) |
Get the next bit of the current document page. The document will be padded for the current minimum scan line time. If the file does not contain an RTC (return to control) code at the end of the page, one will be added where appropriate. | |
int | t4_tx_get_byte (t4_state_t *s) |
Get the next byte of the current document page. The document will be padded for the current minimum scan line time. If the file does not contain an RTC (return to control) code at the end of the page, one will be added where appropriate. | |
int | t4_tx_get_chunk (t4_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. If the file does not contain an RTC (return to control) code at the end of the page, one will be added where appropriate. | |
int | t4_tx_check_bit (t4_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. If the file does not contain an RTC (return to control) code at the end of the page, one will be added. | |
int | t4_tx_delete (t4_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_create. | |
int | t4_tx_end (t4_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. | |
void | t4_tx_set_tx_encoding (t4_state_t *s, int encoding) |
Set the encoding for the encoded data. | |
void | t4_tx_set_min_row_bits (t4_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. | |
void | t4_tx_set_local_ident (t4_state_t *s, const char *ident) |
Set the identity of the local machine, for inclusion in page headers. | |
void | t4_tx_set_header_info (t4_state_t *s, const char *info) |
Set the header info. | |
int | t4_tx_get_y_resolution (t4_state_t *s) |
Get the row-to-row (y) resolution of the current page. | |
int | t4_tx_get_x_resolution (t4_state_t *s) |
Get the column-to-column (x) resolution of the current page. | |
int | t4_tx_get_image_width (t4_state_t *s) |
Get the width of the current page, in pixel columns. | |
int | t4_tx_get_pages_in_file (t4_state_t *s) |
Get the number of pages in the file. | |
void | t4_get_transfer_statistics (t4_state_t *s, t4_stats_t *t) |
Get the current transfer statistics. | |
const char * | t4_encoding_to_str (int encoding) |
Get the short text name of an encoding format. | |
Variables | |
const T4_table_entry | t4_white_codes [] |
const T4_table_entry | t4_black_codes [] |
const char* t4_encoding_to_str | ( | int | encoding | ) |
Get the short text name of an encoding format.
Get the short text name of an encoding format.
encoding | The encoding type. |
void t4_get_transfer_statistics | ( | t4_state_t * | s, | |
t4_stats_t * | t | |||
) |
Get the current transfer statistics.
Get the current image transfer statistics.
s | The T.4 context. | |
t | A pointer to a statistics structure. |
t4_state_t* t4_rx_create | ( | const char * | file, | |
int | output_encoding | |||
) |
Allocate a T.4 transmit handling context, and initialise it.
file | The name of the file to be received. | |
output_encoding | The output encoding. |
int t4_rx_delete | ( | t4_state_t * | s | ) |
End reception of a document. Tidy up, close the file and free the context. This should be used to end T.4 reception started with t4_rx_create.
s | The T.4 receive context. |
int t4_rx_end | ( | t4_state_t * | s | ) |
End reception of a document. Tidy up and close the file. This should be used to end T.4 reception started with t4_rx_init.
s | The T.4 context. |
int t4_rx_end_page | ( | t4_state_t * | s | ) |
Complete the reception of a page.
s | The T.4 receive context. |
int t4_rx_init | ( | t4_state_t * | s, | |
const char * | file, | |||
int | output_encoding | |||
) |
Prepare for reception of a document.
s | The T.4 context. | |
file | The name of the file to be received. | |
output_encoding | The output encoding. |
int t4_rx_put_bit | ( | t4_state_t * | s, | |
int | bit | |||
) |
Put a bit of the current document page.
s | The T.4 context. | |
bit | The data bit. |
int t4_rx_put_byte | ( | t4_state_t * | s, | |
uint8_t | byte | |||
) |
Put a byte of the current document page.
s | The T.4 context. | |
byte | The data byte. |
int t4_rx_put_chunk | ( | t4_state_t * | s, | |
const uint8_t | buf[], | |||
int | len | |||
) |
Put a byte of the current document page.
s | The T.4 context. | |
buf | The buffer containing the chunk. | |
len | The length of the chunk. |
void t4_rx_set_far_ident | ( | t4_state_t * | s, | |
const char * | ident | |||
) |
Set the identity of the remote machine, for inclusion in the file.
s | The T.4 context. | |
ident | The identity string. |
void t4_rx_set_image_width | ( | t4_state_t * | s, | |
int | width | |||
) |
Set the expected width of the received image, in pixel columns.
s | The T.4 context. | |
columns | The number of pixels across the image. |
void t4_rx_set_model | ( | t4_state_t * | s, | |
const char * | model | |||
) |
Set the model of the remote machine, for inclusion in the file.
s | The T.4 context. | |
model | The model string, or NULL. |
void t4_rx_set_rx_encoding | ( | t4_state_t * | s, | |
int | encoding | |||
) |
Set the encoding for the received data.
s | The T.4 context. | |
encoding | The encoding. |
void t4_rx_set_sub_address | ( | t4_state_t * | s, | |
const char * | sub_address | |||
) |
Set the sub-address of the fax, for inclusion in the file.
s | The T.4 context. | |
sub_address | The sub-address string. |
void t4_rx_set_vendor | ( | t4_state_t * | s, | |
const char * | vendor | |||
) |
Set the vendor of the remote machine, for inclusion in the file.
s | The T.4 context. | |
vendor | The vendor string, or NULL. |
void t4_rx_set_x_resolution | ( | t4_state_t * | s, | |
int | resolution | |||
) |
Set the column-to-column (x) resolution to expect for a received image.
s | The T.4 context. | |
resolution | The resolution, in pixels per metre. |
void t4_rx_set_y_resolution | ( | t4_state_t * | s, | |
int | resolution | |||
) |
Set the row-to-row (y) resolution to expect for a received image.
s | The T.4 context. | |
resolution | The resolution, in pixels per metre. |
int t4_rx_start_page | ( | t4_state_t * | s | ) |
Prepare to receive the next page of the current document.
s | The T.4 context. |
int t4_tx_check_bit | ( | t4_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. If the file does not contain an RTC (return to control) code at the end of the page, one will be added.
s | The T.4 context. |
t4_state_t* t4_tx_create | ( | const char * | file, | |
int | start_page, | |||
int | stop_page | |||
) |
Allocate a T.4 receive handling context, and initialise it.
s | The T.4 context. | |
file | The name of the file to be sent. |
int t4_tx_delete | ( | t4_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_create.
s | The T.4 context. |
int t4_tx_end | ( | t4_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.
s | The T.4 context. |
int t4_tx_end_page | ( | t4_state_t * | s | ) |
Complete the sending of a page.
s | The T.4 context. |
int t4_tx_get_bit | ( | t4_state_t * | s | ) |
Get the next bit of the current document page. The document will be padded for the current minimum scan line time. If the file does not contain an RTC (return to control) code at the end of the page, one will be added where appropriate.
s | The T.4 context. |
int t4_tx_get_byte | ( | t4_state_t * | s | ) |
Get the next byte of the current document page. The document will be padded for the current minimum scan line time. If the file does not contain an RTC (return to control) code at the end of the page, one will be added where appropriate.
s | The T.4 context. |
int t4_tx_get_chunk | ( | t4_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. If the file does not contain an RTC (return to control) code at the end of the page, one will be added where appropriate.
s | The T.4 context. | |
buf | The buffer into which the chunk is to written. | |
max_len | The maximum length of the chunk. |
int t4_tx_get_image_width | ( | t4_state_t * | s | ) |
Get the width of the current page, in pixel columns.
s | The T.4 context. |
int t4_tx_get_pages_in_file | ( | t4_state_t * | s | ) |
Get the number of pages in the file.
s | The T.4 context. |
int t4_tx_get_x_resolution | ( | t4_state_t * | s | ) |
Get the column-to-column (x) resolution of the current page.
s | The T.4 context. |
int t4_tx_get_y_resolution | ( | t4_state_t * | s | ) |
Get the row-to-row (y) resolution of the current page.
s | The T.4 context. |
int t4_tx_init | ( | t4_state_t * | s, | |
const char * | file, | |||
int | start_page, | |||
int | stop_page | |||
) |
Prepare for transmission of a document.
s | The T.4 context. | |
file | The name of the file to be sent. | |
start_page | The first page to send. -1 for no restriction. | |
stop_page | The last page to send. -1 for no restriction. |
int t4_tx_more_pages | ( | t4_state_t * | s | ) |
Check for the existance of the next page. This information can be needed before it is determined that the current page is finished with.
s | The T.4 context. |
int t4_tx_restart_page | ( | t4_state_t * | s | ) |
Prepare the current page for a resend.
s | The T.4 context. |
void t4_tx_set_header_info | ( | t4_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.
s | The T.4 context. | |
info | A string, of up to 50 bytes, which will form the info field. |
void t4_tx_set_local_ident | ( | t4_state_t * | s, | |
const char * | ident | |||
) |
Set the identity of the local machine, for inclusion in page headers.
s | The T.4 context. | |
ident | The identity string. |
void t4_tx_set_min_row_bits | ( | t4_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.
s | The T.4 context. | |
bits | The minimum number of bits per row. |
void t4_tx_set_tx_encoding | ( | t4_state_t * | s, | |
int | encoding | |||
) |
Set the encoding for the encoded data.
s | The T.4 context. | |
encoding | The encoding. |
int t4_tx_start_page | ( | t4_state_t * | s | ) |
Prepare to send the next page of the current document.
s | The T.4 context. |