t38_non_ecm_buffer.c File Reference
`#include <inttypes.h>`
`#include <stdlib.h>`
`#include <stdio.h>`
`#include <fcntl.h>`
`#include <time.h>`
`#include <string.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

int | t38_non_ecm_buffer_get_bit (void *user_data)
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)

## Function Documentation

## t38_non_ecm_buffer_init()

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.

Parameters

  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.

Returns
  A pointer to the buffer context, or NULL if there was a problem.

References t38_non_ecm_buffer_state_s::image_data_mode, and t38_non_ecm_buffer_state_s::min_bits_per_row.

Referenced by t38_gateway_init().

## t38_non_ecm_buffer_inject()

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.

Parameters

  s | The buffer context.
  buf | The data buffer to be injected.
  len | The length of the data to be injected.

References t38_non_ecm_buffer_state_s::bit_stream, t38_non_ecm_buffer_state_s::data, t38_non_ecm_buffer_state_s::flow_control_fill_octet, t38_non_ecm_buffer_state_s::in_octets, t38_non_ecm_buffer_state_s::in_ptr, t38_non_ecm_buffer_state_s::in_rows, t38_non_ecm_buffer_state_s::input_phase, t38_non_ecm_buffer_state_s::latest_eol_ptr, t38_non_ecm_buffer_state_s::min_bits_per_row, t38_non_ecm_buffer_state_s::min_row_bits_fill_octets, t38_non_ecm_buffer_state_s::row_bits, and T38_NON_ECM_TX_BUF_LEN.

## t38_non_ecm_buffer_push()

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.

Parameters

  s | The buffer context.

References t38_non_ecm_buffer_state_s::data_finished, t38_non_ecm_buffer_state_s::in_ptr, and t38_non_ecm_buffer_state_s::latest_eol_ptr.

## t38_non_ecm_buffer_report_input_status()

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.

Parameters

  s | The buffer context.
  logging | The logging context.

References t38_non_ecm_buffer_state_s::in_octets, t38_non_ecm_buffer_state_s::in_rows, t38_non_ecm_buffer_state_s::min_row_bits_fill_octets, and span_log().

## t38_non_ecm_buffer_report_output_status()

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.

Parameters

  s | The buffer context.
  logging | The logging context.

References t38_non_ecm_buffer_state_s::flow_control_fill_octets, t38_non_ecm_buffer_state_s::out_octets, t38_non_ecm_buffer_state_s::out_rows, and span_log().

## t38_non_ecm_buffer_set_mode()

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.

Parameters

  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.

References t38_non_ecm_buffer_state_s::image_data_mode, and t38_non_ecm_buffer_state_s::min_bits_per_row.