#include <inttypes.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#include <tgmath.h>
#include <math.h>
#include "floating_fudge.h"
#include <assert.h>
#include "spandsp/telephony.h"
#include "spandsp/logging.h"
#include "spandsp/queue.h"
#include "spandsp/dc_restore.h"
#include "spandsp/bit_operations.h"
#include "spandsp/async.h"
#include "spandsp/t38_non_ecm_buffer.h"
#include "spandsp/private/t38_non_ecm_buffer.h"
Enumerations | |
enum | { TCF_AT_INITIAL_ALL_ONES = 0, TCF_AT_ALL_ZEROS = 1, IMAGE_WAITING_FOR_FIRST_EOL = 2, IMAGE_IN_PROGRESS = 3 } |
Functions | |
SPAN_DECLARE_NONSTD (int) | |
Get the next bit of a transmitted serial bit stream. | |
void | t38_non_ecm_buffer_push (t38_non_ecm_buffer_state_t *s) |
Inform a T.38 rate adapting non-ECM buffer context that the incoming data has finished, and the contents of the buffer should be played out as quickly as possible. | |
void | t38_non_ecm_buffer_inject (t38_non_ecm_buffer_state_t *s, const uint8_t *buf, int len) |
Inject data to T.38 rate adapting non-ECM buffer context. | |
void | t38_non_ecm_buffer_report_input_status (t38_non_ecm_buffer_state_t *s, logging_state_t *logging) |
Report the input status of a T.38 rate adapting non-ECM buffer context to the specified logging context. | |
void | t38_non_ecm_buffer_report_output_status (t38_non_ecm_buffer_state_t *s, logging_state_t *logging) |
Report the output status of a T.38 rate adapting non-ECM buffer context to the specified logging context. | |
void | t38_non_ecm_buffer_set_mode (t38_non_ecm_buffer_state_t *s, int mode, int min_bits_per_row) |
Set the mode of a T.38 rate adapting non-ECM buffer context. | |
t38_non_ecm_buffer_state_t * | t38_non_ecm_buffer_init (t38_non_ecm_buffer_state_t *s, int mode, int min_bits_per_row) |
Initialise a T.38 rate adapting non-ECM buffer context. | |
int | t38_non_ecm_buffer_release (t38_non_ecm_buffer_state_t *s) |
int | t38_non_ecm_buffer_free (t38_non_ecm_buffer_state_t *s) |
SPAN_DECLARE_NONSTD | ( | int | ) |
Get the next bit of a transmitted serial bit stream.
Get the next bit of data from a T.38 rate adapting non-ECM buffer context.
Get a bit of received non-ECM image data.
Get the next bit of a transmitted serial bit stream.
user_data | An opaque point which must point to a transmitter context. |
Get the next bit of a transmitted serial bit stream.
Process a block of received V.8 audio samples.
Fake processing of a missing block of received V.29 modem audio samples.
Fake processing of a missing block of received V.27ter modem audio samples.
Generate a block of V.22bis modem audio samples.
Fake processing of a missing block of received V.22bis modem audio samples.
Process a block of received V.18 audio samples.
Fake processing of a missing block of received V.17 modem audio samples.
Generate a block of FAX audio samples.
Apply fake received audio processing.
Generate a block of T.31 modem audio samples.
Fake processing of a missing block of received T.31 modem audio samples.
Dummy receive fillin callback.
Dummy receive callback.
Process a block of samples through an instance of the modem connect tones detector.
Get the next sequence of bytes for transmission.
Get the next byte for transmission.
Fake processing of a missing block of received FSK modem audio samples.
Process a block of received FSK modem audio samples.
Apply T.30 transmit processing to generate a block of audio samples.
Apply fake T.30 receive processing when a block of audio samples is missing (e.g due to packet loss).
s | The FAX context. | |
len | The number of samples to fake. |
Apply T.30 transmit processing to generate a block of audio samples.
s | The FAX context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Process a block of received FSK modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received FSK modem audio samples (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
s | A pointer to an HDLC transmitter context. |
s | A pointer to an HDLC transmitter context. | |
buf | The buffer for the data. | |
max_len | The number of bytes to get. |
s | The context. | |
amp | An array of signal samples. | |
len | The number of samples in the array. |
A dummy routine to use as a receive callback, when we aren't really trying to process what is received. It just absorbs and ignores the data.
user_data | The context. | |
amp | The signal.buffer | |
len | The length of the signal buffer |
A dummy routine to use as a receive fillin callback, when we aren't really trying to process what is received. It just absorbs and ignores the request.
user_data | The context. | |
len | The length of the signal buffer |
Fake processing of a missing block of received T.31 modem audio samples (e.g due to packet loss).
s | The T.31 modem context. | |
len | The number of samples to fake. |
Generate a block of T.31 modem audio samples.
s | The T.31 modem context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Apply fake processing when a block of audio samples is missing (e.g due to packet loss).
s | The T.38 context. | |
len | The number of samples to fake. |
Generate a block of FAX audio samples.
s | The T.38 context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Fake processing of a missing block of received V.17 modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Process a block of received V.18 audio samples.
s | The V.18 context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received V.22bis modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Generate a block of V.22bis modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples to be generated. |
Fake processing of a missing block of received V.27ter modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Fake processing of a missing block of received V.29 modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Process a block of received V.8 audio samples.
s | The V.8 context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Get the next bit of a transmitted serial bit stream.
Apply T.30 transmit processing to generate a block of audio samples.
Apply fake T.30 receive processing.
Apply T.30 receive processing to a block of audio samples.
s | The FAX context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Apply fake T.30 receive processing when a block of audio samples is missing (e.g due to packet loss).
s | The FAX context. | |
len | The number of samples to fake. |
Apply T.30 transmit processing to generate a block of audio samples.
s | The FAX context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Get the next bit of a transmitted serial bit stream.
Fake processing of a missing block of received FSK modem audio samples.
Process a block of received FSK modem audio samples.
Generate a block of FSK modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples to be generated. |
Process a block of received FSK modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received FSK modem audio samples (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Get the next bit of a transmitted serial bit stream.
Get the next sequence of bytes for transmission.
Get the next byte for transmission.
s | A pointer to an HDLC transmitter context. |
s | A pointer to an HDLC transmitter context. |
s | A pointer to an HDLC transmitter context. | |
buf | The buffer for the data. | |
max_len | The number of bytes to get. |
Get the next bit of a transmitted serial bit stream.
Process a block of samples through an instance of the modem connect tones detector.
s | The context. | |
amp | An array of signal samples. | |
len | The number of samples to generate. |
s | The context. | |
amp | An array of signal samples. | |
len | The number of samples in the array. |
Get the next bit of a transmitted serial bit stream.
Dummy receive fillin callback.
Dummy receive callback.
Generate a block of silent audio samples.
s | The silence generator context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
A dummy routine to use as a receive callback, when we aren't really trying to process what is received. It just absorbs and ignores the data.
user_data | The context. | |
amp | The signal.buffer | |
len | The length of the signal buffer |
A dummy routine to use as a receive fillin callback, when we aren't really trying to process what is received. It just absorbs and ignores the request.
user_data | The context. | |
len | The length of the signal buffer |
Get the next bit of a transmitted serial bit stream.
Generate a block of T.31 modem audio samples.
Fake processing of a missing block of received T.31 modem audio samples.
Process a block of received T.31 modem audio samples.
s | The T.31 modem context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received T.31 modem audio samples (e.g due to packet loss).
s | The T.31 modem context. | |
len | The number of samples to fake. |
Generate a block of T.31 modem audio samples.
s | The T.31 modem context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Get the next bit of a transmitted serial bit stream.
Generate a block of FAX audio samples.
Apply fake received audio processing.
Process a block of received FAX audio samples.
s | The T.38 context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Apply fake processing when a block of audio samples is missing (e.g due to packet loss).
s | The T.38 context. | |
len | The number of samples to fake. |
Generate a block of FAX audio samples.
s | The T.38 context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Get the next bit of a transmitted serial bit stream.
Fake processing of a missing block of received V.17 modem audio samples.
Process a block of received V.17 modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received V.17 modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Get the next bit of a transmitted serial bit stream.
Generate a block of V.17 modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples to be generated. |
Get the next bit of a transmitted serial bit stream.
Process a block of received V.18 audio samples.
Generate a block of V.18 audio samples.
s | The V.18 context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Process a block of received V.18 audio samples.
s | The V.18 context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Get the next bit of a transmitted serial bit stream.
Generate a block of V.22bis modem audio samples.
Fake processing of a missing block of received V.22bis modem audio samples.
Process a block of received V.22bis modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received V.22bis modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Generate a block of V.22bis modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples to be generated. |
Get the next bit of a transmitted serial bit stream.
Fake processing of a missing block of received V.27ter modem audio samples.
Process a block of received V.27ter modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received V.27ter modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Get the next bit of a transmitted serial bit stream.
Generate a block of V.27ter modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples to be generated. |
Get the next bit of a transmitted serial bit stream.
Fake processing of a missing block of received V.29 modem audio samples.
Process a block of received V.29 modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
Fake processing of a missing block of received V.29 modem audio samples. (e.g due to packet loss).
s | The modem context. | |
len | The number of samples to fake. |
Get the next bit of a transmitted serial bit stream.
Generate a block of V.29 modem audio samples.
s | The modem context. | |
amp | The audio sample buffer. | |
len | The number of samples to be generated. |
Get the next bit of a transmitted serial bit stream.
Process a block of received V.8 audio samples.
Generate a block of V.8 audio samples.
s | The V.8 context. | |
amp | The audio sample buffer. | |
max_len | The number of samples to be generated. |
Process a block of received V.8 audio samples.
s | The V.8 context. | |
amp | The audio sample buffer. | |
len | The number of samples in the buffer. |
References t38_non_ecm_buffer_state_s::bit_no, t38_non_ecm_buffer_state_s::data, t38_non_ecm_buffer_state_s::data_finished, t38_non_ecm_buffer_state_s::flow_control_fill_octet, t38_non_ecm_buffer_state_s::flow_control_fill_octets, t38_non_ecm_buffer_state_s::latest_eol_ptr, t38_non_ecm_buffer_state_s::octet, t38_non_ecm_buffer_state_s::out_octets, t38_non_ecm_buffer_state_s::out_ptr, SIG_STATUS_END_OF_DATA, and T38_NON_ECM_TX_BUF_LEN.
t38_non_ecm_buffer_state_t* t38_non_ecm_buffer_init | ( | t38_non_ecm_buffer_state_t * | s, | |
int | mode, | |||
int | min_row_bits | |||
) |
Initialise a T.38 rate adapting non-ECM buffer context.
s | The buffer context. | |
mode | TRUE for image data mode, or FALSE for TCF mode. | |
bits | The minimum number of bits per FAX image row. |
Referenced by t38_gateway_init().
void t38_non_ecm_buffer_inject | ( | t38_non_ecm_buffer_state_t * | s, | |
const uint8_t * | buf, | |||
int | len | |||
) |
Inject data to T.38 rate adapting non-ECM buffer context.
s | The buffer context. | |
buf | The data buffer to be injected. | |
len | The length of the data to be injected. |
References T38_NON_ECM_TX_BUF_LEN.
void t38_non_ecm_buffer_push | ( | t38_non_ecm_buffer_state_t * | s | ) |
Inform a T.38 rate adapting non-ECM buffer context that the incoming data has finished, and the contents of the buffer should be played out as quickly as possible.
s | The buffer context. |
void t38_non_ecm_buffer_report_input_status | ( | t38_non_ecm_buffer_state_t * | s, | |
logging_state_t * | logging | |||
) |
Report the input status of a T.38 rate adapting non-ECM buffer context to the specified logging context.
s | The buffer context. | |
logging | The logging context. |
References span_log().
void t38_non_ecm_buffer_report_output_status | ( | t38_non_ecm_buffer_state_t * | s, | |
logging_state_t * | logging | |||
) |
Report the output status of a T.38 rate adapting non-ECM buffer context to the specified logging context.
s | The buffer context. | |
logging | The logging context. |
References span_log().
void t38_non_ecm_buffer_set_mode | ( | t38_non_ecm_buffer_state_t * | s, | |
int | mode, | |||
int | min_row_bits | |||
) |
Set the mode of a T.38 rate adapting non-ECM buffer context.
s | The buffer context. | |
mode | TRUE for image data mode, or FALSE for TCF mode. | |
bits | The minimum number of bits per FAX image row. |