Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
f758d53e
提交
f758d53e
authored
4月 02, 2013
作者:
Steve Underwood
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Some preparations for colour FAX
上级
e23b6a22
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
754 行增加
和
417 行删除
+754
-417
ademco_contactid.c
libs/spandsp/src/ademco_contactid.c
+9
-11
dtmf.c
libs/spandsp/src/dtmf.c
+6
-6
t30.h
libs/spandsp/src/spandsp/private/t30.h
+10
-2
v18.h
libs/spandsp/src/spandsp/private/v18.h
+3
-1
t30.h
libs/spandsp/src/spandsp/t30.h
+32
-29
t4_rx.h
libs/spandsp/src/spandsp/t4_rx.h
+2
-2
t30.c
libs/spandsp/src/t30.c
+468
-258
t30_api.c
libs/spandsp/src/t30_api.c
+10
-12
t4_rx.c
libs/spandsp/src/t4_rx.c
+18
-18
t4_tx.c
libs/spandsp/src/t4_tx.c
+10
-10
v18.c
libs/spandsp/src/v18.c
+117
-14
generate_striped_pages.c
libs/spandsp/test-data/itu/fax/generate_striped_pages.c
+1
-1
async_tests.c
libs/spandsp/tests/async_tests.c
+25
-27
fax_tests.c
libs/spandsp/tests/fax_tests.c
+14
-12
fax_tests.sh
libs/spandsp/tests/fax_tests.sh
+13
-0
tsb85_tests.c
libs/spandsp/tests/tsb85_tests.c
+14
-12
mod_spandsp_fax.c
src/mod/applications/mod_spandsp/mod_spandsp_fax.c
+2
-2
没有找到文件。
libs/spandsp/src/ademco_contactid.c
浏览文件 @
f758d53e
...
@@ -437,18 +437,17 @@ static const struct ademco_code_s ademco_codes[] =
...
@@ -437,18 +437,17 @@ static const struct ademco_code_s ademco_codes[] =
{
-
1
,
"???"
}
{
-
1
,
"???"
}
};
};
#if defined(SPANDSP_USE_FIXED_POINT)
#define GOERTZEL_SAMPLES_PER_BLOCK 55
/* We need to detect over a +-5% range */
#define GOERTZEL_SAMPLES_PER_BLOCK 55
/* We need to detect over a +-5% range */
#define DETECTION_THRESHOLD 16439
/* -42dBm0 [((GOERTZEL_SAMPLES_PER_BLOCK*GOERTZEL_SAMPLES_PER_BLOCK*32768.0/(1.4142*128.0))*10^((-42 - DBM0_MAX_SINE_POWER)/20.0))^2] */
#define TONE_TWIST 4
/* 6dB */
#if defined(SPANDSP_USE_FIXED_POINT)
#define TONE_TO_TOTAL_ENERGY 64
/* -3dB */
#define DETECTION_THRESHOLD 3035
/* -42dBm0 */
#define TONE_TO_TOTAL_ENERGY 45.2233f
/* -0.85dB */
#else
#else
#define GOERTZEL_SAMPLES_PER_BLOCK 55
/* We need to detect over a +-5% range */
#define DETECTION_THRESHOLD 49728296.6f
/* -42dBm0 [((GOERTZEL_SAMPLES_PER_BLOCK*32768.0/1.4142)*10^((-42 - DBM0_MAX_SINE_POWER)/20.0))^2] */
#define DETECTION_THRESHOLD 2104205.6f
/* -42dBm0 [((GOERTZEL_SAMPLES_PER_BLOCK*GOERTZEL_SAMPLES_PER_BLOCK*32768.0/1.4142)*10^((-42 - DBM0_MAX_SINE_POWER)/20.0))^2] */
#define TONE_TO_TOTAL_ENERGY 45.2233f
/* -0.85dB [GOERTZEL_SAMPLES_PER_BLOCK*10^(-0.85/10.0)] */
#define TONE_TWIST 3.981f
/* 6dB */
#define TONE_TO_TOTAL_ENERGY 1.995f
/* 3dB */
#endif
#endif
static
int
tone_rx_init
=
FALSE
;
static
goertzel_descriptor_t
tone_1400_desc
;
static
goertzel_descriptor_t
tone_1400_desc
;
static
goertzel_descriptor_t
tone_2300_desc
;
static
goertzel_descriptor_t
tone_2300_desc
;
...
@@ -1083,8 +1082,6 @@ SPAN_DECLARE(ademco_contactid_sender_state_t *) ademco_contactid_sender_init(ade
...
@@ -1083,8 +1082,6 @@ SPAN_DECLARE(ademco_contactid_sender_state_t *) ademco_contactid_sender_init(ade
tone_report_func_t
callback
,
tone_report_func_t
callback
,
void
*
user_data
)
void
*
user_data
)
{
{
static
int
initialised
=
FALSE
;
if
(
s
==
NULL
)
if
(
s
==
NULL
)
{
{
if
((
s
=
(
ademco_contactid_sender_state_t
*
)
malloc
(
sizeof
(
*
s
)))
==
NULL
)
if
((
s
=
(
ademco_contactid_sender_state_t
*
)
malloc
(
sizeof
(
*
s
)))
==
NULL
)
...
@@ -1094,10 +1091,11 @@ SPAN_DECLARE(ademco_contactid_sender_state_t *) ademco_contactid_sender_init(ade
...
@@ -1094,10 +1091,11 @@ SPAN_DECLARE(ademco_contactid_sender_state_t *) ademco_contactid_sender_init(ade
span_log_init
(
&
s
->
logging
,
SPAN_LOG_NONE
,
NULL
);
span_log_init
(
&
s
->
logging
,
SPAN_LOG_NONE
,
NULL
);
span_log_set_protocol
(
&
s
->
logging
,
"Ademco"
);
span_log_set_protocol
(
&
s
->
logging
,
"Ademco"
);
if
(
!
initialised
)
if
(
!
tone_rx_init
)
{
{
make_goertzel_descriptor
(
&
tone_1400_desc
,
1400
.
0
f
,
GOERTZEL_SAMPLES_PER_BLOCK
);
make_goertzel_descriptor
(
&
tone_1400_desc
,
1400
.
0
f
,
GOERTZEL_SAMPLES_PER_BLOCK
);
make_goertzel_descriptor
(
&
tone_2300_desc
,
2300
.
0
f
,
GOERTZEL_SAMPLES_PER_BLOCK
);
make_goertzel_descriptor
(
&
tone_2300_desc
,
2300
.
0
f
,
GOERTZEL_SAMPLES_PER_BLOCK
);
tone_rx_init
=
TRUE
;
}
}
goertzel_init
(
&
s
->
tone_1400
,
&
tone_1400_desc
);
goertzel_init
(
&
s
->
tone_1400
,
&
tone_1400_desc
);
goertzel_init
(
&
s
->
tone_2300
,
&
tone_2300_desc
);
goertzel_init
(
&
s
->
tone_2300
,
&
tone_2300_desc
);
...
...
libs/spandsp/src/dtmf.c
浏览文件 @
f758d53e
...
@@ -62,6 +62,8 @@
...
@@ -62,6 +62,8 @@
#define DEFAULT_DTMF_TX_ON_TIME 50
#define DEFAULT_DTMF_TX_ON_TIME 50
#define DEFAULT_DTMF_TX_OFF_TIME 55
#define DEFAULT_DTMF_TX_OFF_TIME 55
#define DTMF_SAMPLES_PER_BLOCK 102
#if defined(SPANDSP_USE_FIXED_POINT)
#if defined(SPANDSP_USE_FIXED_POINT)
#define DTMF_THRESHOLD 10438
/* -42dBm0 */
#define DTMF_THRESHOLD 10438
/* -42dBm0 */
#define DTMF_NORMAL_TWIST 6.309f
/* 8dB */
#define DTMF_NORMAL_TWIST 6.309f
/* 8dB */
...
@@ -70,16 +72,14 @@
...
@@ -70,16 +72,14 @@
#define DTMF_RELATIVE_PEAK_COL 6.309f
/* 8dB */
#define DTMF_RELATIVE_PEAK_COL 6.309f
/* 8dB */
#define DTMF_TO_TOTAL_ENERGY 83.868f
/* -0.85dB */
#define DTMF_TO_TOTAL_ENERGY 83.868f
/* -0.85dB */
#define DTMF_POWER_OFFSET 68.251f
/* 10*log(256.0*256.0*DTMF_SAMPLES_PER_BLOCK) */
#define DTMF_POWER_OFFSET 68.251f
/* 10*log(256.0*256.0*DTMF_SAMPLES_PER_BLOCK) */
#define DTMF_SAMPLES_PER_BLOCK 102
#else
#else
#define DTMF_THRESHOLD 171032462.0f
/* -42dBm0 [((DTMF_SAMPLES_PER_BLOCK*32768.0/1.4142)*10^((-42 - DBM0_MAX_SINE_POWER)/20.0))^2
=> 171032462.0
] */
#define DTMF_THRESHOLD 171032462.0f
/* -42dBm0 [((DTMF_SAMPLES_PER_BLOCK*32768.0/1.4142)*10^((-42 - DBM0_MAX_SINE_POWER)/20.0))^2] */
#define DTMF_NORMAL_TWIST 6.309f
/* 8dB [10^(8/10) => 6.309] */
#define DTMF_NORMAL_TWIST 6.309f
/* 8dB [10^(8/10) => 6.309] */
#define DTMF_REVERSE_TWIST 2.512f
/* 4dB */
#define DTMF_REVERSE_TWIST 2.512f
/* 4dB */
#define DTMF_RELATIVE_PEAK_ROW 6.309f
/* 8dB */
#define DTMF_RELATIVE_PEAK_ROW 6.309f
/* 8dB */
#define DTMF_RELATIVE_PEAK_COL 6.309f
/* 8dB */
#define DTMF_RELATIVE_PEAK_COL 6.309f
/* 8dB */
#define DTMF_TO_TOTAL_ENERGY 83.868f
/* -0.85dB [DTMF_SAMPLES_PER_BLOCK*10^(-0.85/10.0)] */
#define DTMF_TO_TOTAL_ENERGY 83.868f
/* -0.85dB [DTMF_SAMPLES_PER_BLOCK*10^(-0.85/10.0)] */
#define DTMF_POWER_OFFSET 110.395f
/* 10*log(32768.0*32768.0*DTMF_SAMPLES_PER_BLOCK) */
#define DTMF_POWER_OFFSET 110.395f
/* 10*log(32768.0*32768.0*DTMF_SAMPLES_PER_BLOCK) */
#define DTMF_SAMPLES_PER_BLOCK 102
#endif
#endif
static
const
float
dtmf_row
[]
=
static
const
float
dtmf_row
[]
=
...
@@ -93,6 +93,7 @@ static const float dtmf_col[] =
...
@@ -93,6 +93,7 @@ static const float dtmf_col[] =
static
const
char
dtmf_positions
[]
=
"123A"
"456B"
"789C"
"*0#D"
;
static
const
char
dtmf_positions
[]
=
"123A"
"456B"
"789C"
"*0#D"
;
static
int
dtmf_rx_inited
=
FALSE
;
static
goertzel_descriptor_t
dtmf_detect_row
[
4
];
static
goertzel_descriptor_t
dtmf_detect_row
[
4
];
static
goertzel_descriptor_t
dtmf_detect_col
[
4
];
static
goertzel_descriptor_t
dtmf_detect_col
[
4
];
...
@@ -409,7 +410,6 @@ SPAN_DECLARE(dtmf_rx_state_t *) dtmf_rx_init(dtmf_rx_state_t *s,
...
@@ -409,7 +410,6 @@ SPAN_DECLARE(dtmf_rx_state_t *) dtmf_rx_init(dtmf_rx_state_t *s,
void
*
user_data
)
void
*
user_data
)
{
{
int
i
;
int
i
;
static
int
initialised
=
FALSE
;
if
(
s
==
NULL
)
if
(
s
==
NULL
)
{
{
...
@@ -431,14 +431,14 @@ SPAN_DECLARE(dtmf_rx_state_t *) dtmf_rx_init(dtmf_rx_state_t *s,
...
@@ -431,14 +431,14 @@ SPAN_DECLARE(dtmf_rx_state_t *) dtmf_rx_init(dtmf_rx_state_t *s,
s
->
in_digit
=
0
;
s
->
in_digit
=
0
;
s
->
last_hit
=
0
;
s
->
last_hit
=
0
;
if
(
!
initialis
ed
)
if
(
!
dtmf_rx_init
ed
)
{
{
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
{
{
make_goertzel_descriptor
(
&
dtmf_detect_row
[
i
],
dtmf_row
[
i
],
DTMF_SAMPLES_PER_BLOCK
);
make_goertzel_descriptor
(
&
dtmf_detect_row
[
i
],
dtmf_row
[
i
],
DTMF_SAMPLES_PER_BLOCK
);
make_goertzel_descriptor
(
&
dtmf_detect_col
[
i
],
dtmf_col
[
i
],
DTMF_SAMPLES_PER_BLOCK
);
make_goertzel_descriptor
(
&
dtmf_detect_col
[
i
],
dtmf_col
[
i
],
DTMF_SAMPLES_PER_BLOCK
);
}
}
initialis
ed
=
TRUE
;
dtmf_rx_init
ed
=
TRUE
;
}
}
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
{
{
...
...
libs/spandsp/src/spandsp/private/t30.h
浏览文件 @
f758d53e
...
@@ -52,8 +52,10 @@ struct t30_state_s
...
@@ -52,8 +52,10 @@ struct t30_state_s
int
supported_modems
;
int
supported_modems
;
/*! \brief A bit mask of the currently supported image compression modes. */
/*! \brief A bit mask of the currently supported image compression modes. */
int
supported_compressions
;
int
supported_compressions
;
/*! \brief A bit mask of the currently supported image resolutions. */
/*! \brief A bit mask of the currently supported bi-level image resolutions. */
int
supported_resolutions
;
int
supported_bilevel_resolutions
;
/*! \brief A bit mask of the currently supported colour image resolutions. */
int
supported_colour_resolutions
;
/*! \brief A bit mask of the currently supported image sizes. */
/*! \brief A bit mask of the currently supported image sizes. */
int
supported_image_sizes
;
int
supported_image_sizes
;
/*! \brief A bit mask of the currently supported T.30 special features. */
/*! \brief A bit mask of the currently supported T.30 special features. */
...
@@ -218,6 +220,12 @@ struct t30_state_s
...
@@ -218,6 +220,12 @@ struct t30_state_s
/*! \brief TRUE if a local T.30 interrupt is pending. */
/*! \brief TRUE if a local T.30 interrupt is pending. */
int
local_interrupt_pending
;
int
local_interrupt_pending
;
/*! \brief The common ground in compression schemes between the local and far ends. */
int
mutual_compressions
;
/*! \brief The common group supported bi-level image resolutions. */
int
mutual_bilevel_resolutions
;
/*! \brief The common group supported colour image resolutions. */
int
mutual_colour_resolutions
;
/*! \brief The image coding to be used on the line for non-bilevel images. */
/*! \brief The image coding to be used on the line for non-bilevel images. */
int
multilevel_line_encoding
;
int
multilevel_line_encoding
;
/*! \brief The image coding being used on the line. */
/*! \brief The image coding being used on the line. */
...
...
libs/spandsp/src/spandsp/private/v18.h
浏览文件 @
f758d53e
...
@@ -33,6 +33,7 @@ struct v18_state_s
...
@@ -33,6 +33,7 @@ struct v18_state_s
int
mode
;
int
mode
;
put_msg_func_t
put_msg
;
put_msg_func_t
put_msg
;
void
*
user_data
;
void
*
user_data
;
int
repeat_shifts
;
union
union
{
{
...
@@ -46,6 +47,7 @@ struct v18_state_s
...
@@ -46,6 +47,7 @@ struct v18_state_s
async_tx_state_t
asynctx
;
async_tx_state_t
asynctx
;
int
baudot_tx_shift
;
int
baudot_tx_shift
;
int
tx_signal_on
;
int
tx_signal_on
;
uint8_t
next_byte
;
int
byte_no
;
int
byte_no
;
fsk_rx_state_t
fskrx
;
fsk_rx_state_t
fskrx
;
...
@@ -56,7 +58,7 @@ struct v18_state_s
...
@@ -56,7 +58,7 @@ struct v18_state_s
int
rx_msg_len
;
int
rx_msg_len
;
int
bit_pos
;
int
bit_pos
;
int
in_progress
;
int
in_progress
;
int
r
epeat_shifts
;
int
r
x_suppression
;
/*! \brief Error and flow logging control */
/*! \brief Error and flow logging control */
logging_state_t
logging
;
logging_state_t
logging
;
...
...
libs/spandsp/src/spandsp/t30.h
浏览文件 @
f758d53e
...
@@ -369,7 +369,7 @@ enum
...
@@ -369,7 +369,7 @@ enum
/*! T.45 run length colour compression */
/*! T.45 run length colour compression */
T30_SUPPORT_COMPRESSION_T45
=
0x80
,
T30_SUPPORT_COMPRESSION_T45
=
0x80
,
/*! T.81 + T.30 Annex E colour JPEG compression */
/*! T.81 + T.30 Annex E colour JPEG compression */
T30_SUPPORT_COMPRESSION_T81
=
0x100
,
T30_SUPPORT_COMPRESSION_T
42_T
81
=
0x100
,
/*! T.81 + T.30 Annex K colour sYCC-JPEG compression */
/*! T.81 + T.30 Annex K colour sYCC-JPEG compression */
T30_SUPPORT_COMPRESSION_SYCC_T81
=
0x200
,
T30_SUPPORT_COMPRESSION_SYCC_T81
=
0x200
,
/*! T.88 monochrome JBIG2 compression */
/*! T.88 monochrome JBIG2 compression */
...
@@ -382,34 +382,37 @@ enum
...
@@ -382,34 +382,37 @@ enum
enum
enum
{
{
/*! Support standard FAX Y-resolution 98/100dpi */
/*! Standard FAX resolution 204dpi x 98dpi - bi-level only */
T30_SUPPORT_STANDARD_RESOLUTION
=
0x01
,
T30_SUPPORT_RESOLUTION_R8_STANDARD
=
0x1
,
/*! Support fine FAX Y-resolution 196/200dpi */
/*! Fine FAX resolution 204dpi x 196dpi - bi-level only */
T30_SUPPORT_FINE_RESOLUTION
=
0x02
,
T30_SUPPORT_RESOLUTION_R8_FINE
=
0x2
,
/*! Support super-fine FAX Y-resolution 392/400dpi */
/*! Super-fine FAX resolution 204dpi x 391dpi - bi-level only */
T30_SUPPORT_SUPERFINE_RESOLUTION
=
0x04
,
T30_SUPPORT_RESOLUTION_R8_SUPERFINE
=
0x4
,
/*! Double FAX resolution 408dpi x 391dpi - bi-level only */
/*! Support half FAX X-resolution 100/102dpi */
T30_SUPPORT_RESOLUTION_R16_SUPERFINE
=
0x8
,
T30_SUPPORT_R4_RESOLUTION
=
0x10000
,
/*! Support standard FAX X-resolution 200/204dpi */
/*! 100dpi x 100 dpi - gray scale and colour only */
T30_SUPPORT_R8_RESOLUTION
=
0x20000
,
T30_SUPPORT_RESOLUTION_100_100
=
0x10
,
/*! Support double FAX X-resolution 400dpi */
/*! 200dpi x 100 dpi - bi-level only */
T30_SUPPORT_R16_RESOLUTION
=
0x40000
,
T30_SUPPORT_RESOLUTION_200_100
=
0x20
,
/*! 200dpi x 200 dpi */
/*! Support 300dpi x 300 dpi */
T30_SUPPORT_RESOLUTION_200_200
=
0x40
,
T30_SUPPORT_300_300_RESOLUTION
=
0x100000
,
/*! 200dpi x 400 dpi - bi-level only */
/*! Support 400dpi x 400 dpi */
T30_SUPPORT_RESOLUTION_200_400
=
0x80
,
T30_SUPPORT_400_400_RESOLUTION
=
0x200000
,
/*! 300dpi x 300 dpi */
/*! Support 600dpi x 600 dpi */
T30_SUPPORT_RESOLUTION_300_300
=
0x100
,
T30_SUPPORT_600_600_RESOLUTION
=
0x400000
,
/*! 300dpi x 600 dpi - bi-level only */
/*! Support 1200dpi x 1200 dpi */
T30_SUPPORT_RESOLUTION_300_600
=
0x200
,
T30_SUPPORT_1200_1200_RESOLUTION
=
0x800000
,
/*! 400dpi x 400 dpi */
/*! Support 300dpi x 600 dpi */
T30_SUPPORT_RESOLUTION_400_400
=
0x400
,
T30_SUPPORT_300_600_RESOLUTION
=
0x1000000
,
/*! 400dpi x 800 dpi - bi-level only */
/*! Support 400dpi x 800 dpi */
T30_SUPPORT_RESOLUTION_400_800
=
0x800
,
T30_SUPPORT_400_800_RESOLUTION
=
0x2000000
,
/*! 600dpi x 600 dpi */
/*! Support 600dpi x 1200 dpi */
T30_SUPPORT_RESOLUTION_600_600
=
0x1000
,
T30_SUPPORT_600_1200_RESOLUTION
=
0x4000000
/*! 600dpi x 1200 dpi - bi-level only */
T30_SUPPORT_RESOLUTION_600_1200
=
0x2000
,
/*! 1200dpi x 1200 dpi */
T30_SUPPORT_RESOLUTION_1200_1200
=
0x4000
};
};
enum
enum
...
...
libs/spandsp/src/spandsp/t4_rx.h
浏览文件 @
f758d53e
...
@@ -65,9 +65,9 @@ typedef enum
...
@@ -65,9 +65,9 @@ typedef enum
/*! T.45 run length colour compression */
/*! T.45 run length colour compression */
T4_COMPRESSION_T45
=
7
,
T4_COMPRESSION_T45
=
7
,
/*! T.42 + T.81 + T.30 Annex E colour JPEG coding */
/*! T.42 + T.81 + T.30 Annex E colour JPEG coding */
T4_COMPRESSION_T42
=
8
,
T4_COMPRESSION_T42
_T81
=
8
,
/*! T.42 + T.81 + T.30 Annex K colour sYCC-JPEG coding */
/*! T.42 + T.81 + T.30 Annex K colour sYCC-JPEG coding */
T4_COMPRESSION_SYCC_T
42
=
9
T4_COMPRESSION_SYCC_T
81
=
9
}
t4_image_compression_t
;
}
t4_image_compression_t
;
/*! Image type */
/*! Image type */
...
...
libs/spandsp/src/t30.c
浏览文件 @
f758d53e
差异被折叠。
点击展开。
libs/spandsp/src/t30_api.c
浏览文件 @
f758d53e
...
@@ -693,20 +693,18 @@ SPAN_DECLARE(int) t30_set_supported_modems(t30_state_t *s, int supported_modems)
...
@@ -693,20 +693,18 @@ SPAN_DECLARE(int) t30_set_supported_modems(t30_state_t *s, int supported_modems)
SPAN_DECLARE
(
int
)
t30_set_supported_compressions
(
t30_state_t
*
s
,
int
supported_compressions
)
SPAN_DECLARE
(
int
)
t30_set_supported_compressions
(
t30_state_t
*
s
,
int
supported_compressions
)
{
{
int
mask
;
/* Mask out the ones we actually support today. */
/* Mask out the ones we actually support today. */
mask
=
T30_SUPPORT_COMPRESSION_T4_1D
supported_compressions
&
=
T30_SUPPORT_COMPRESSION_T4_1D
|
T30_SUPPORT_COMPRESSION_T4_2D
|
T30_SUPPORT_COMPRESSION_T4_2D
|
T30_SUPPORT_COMPRESSION_T6
|
T30_SUPPORT_COMPRESSION_T6
//| T30_SUPPORT_COMPRESSION_T81
//| T30_SUPPORT_COMPRESSION_T81
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
|
T30_SUPPORT_COMPRESSION_T43
|
T30_SUPPORT_COMPRESSION_T43
#endif
#endif
|
T30_SUPPORT_COMPRESSION_T85
|
T30_SUPPORT_COMPRESSION_T85
|
T30_SUPPORT_COMPRESSION_T85_L0
|
T30_SUPPORT_COMPRESSION_T85_L0
|
0
;
|
0
;
s
->
supported_compressions
=
supported_compressions
&
mask
;
s
->
supported_compressions
=
supported_compressions
;
t30_build_dis_or_dtc
(
s
);
t30_build_dis_or_dtc
(
s
);
return
0
;
return
0
;
}
}
...
@@ -714,7 +712,7 @@ SPAN_DECLARE(int) t30_set_supported_compressions(t30_state_t *s, int supported_c
...
@@ -714,7 +712,7 @@ SPAN_DECLARE(int) t30_set_supported_compressions(t30_state_t *s, int supported_c
SPAN_DECLARE
(
int
)
t30_set_supported_resolutions
(
t30_state_t
*
s
,
int
supported_resolutions
)
SPAN_DECLARE
(
int
)
t30_set_supported_resolutions
(
t30_state_t
*
s
,
int
supported_resolutions
)
{
{
s
->
supported_resolutions
=
supported_resolutions
;
s
->
supported_
bilevel_
resolutions
=
supported_resolutions
;
t30_build_dis_or_dtc
(
s
);
t30_build_dis_or_dtc
(
s
);
return
0
;
return
0
;
}
}
...
...
libs/spandsp/src/t4_rx.c
浏览文件 @
f758d53e
...
@@ -97,18 +97,18 @@ SPAN_DECLARE(const char *) t4_encoding_to_str(int encoding)
...
@@ -97,18 +97,18 @@ SPAN_DECLARE(const char *) t4_encoding_to_str(int encoding)
return
"T.4 2-D"
;
return
"T.4 2-D"
;
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
"T.6"
;
return
"T.6"
;
case
T4_COMPRESSION_T42
:
return
"T.42"
;
case
T4_COMPRESSION_SYCC_T42
:
return
"sYCC T.42"
;
case
T4_COMPRESSION_T43
:
return
"T.43"
;
case
T4_COMPRESSION_T45
:
return
"T.45"
;
case
T4_COMPRESSION_T85
:
case
T4_COMPRESSION_T85
:
return
"T.85"
;
return
"T.85"
;
case
T4_COMPRESSION_T85_L0
:
case
T4_COMPRESSION_T85_L0
:
return
"T.85(L0)"
;
return
"T.85(L0)"
;
case
T4_COMPRESSION_T42_T81
:
return
"T.81"
;
case
T4_COMPRESSION_SYCC_T81
:
return
"sYCC T.81"
;
case
T4_COMPRESSION_T43
:
return
"T.43"
;
case
T4_COMPRESSION_T45
:
return
"T.45"
;
}
}
return
"???"
;
return
"???"
;
}
}
...
@@ -171,7 +171,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
...
@@ -171,7 +171,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
output_compression
=
COMPRESSION_CCITT_T6
;
output_compression
=
COMPRESSION_CCITT_T6
;
break
;
break
;
#if defined(SPANDSP_SUPPORT_T42)
#if defined(SPANDSP_SUPPORT_T42)
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
output_compression
=
COMPRESSION_JPEG
;
output_compression
=
COMPRESSION_JPEG
;
bits_per_sample
=
8
;
bits_per_sample
=
8
;
samples_per_pixel
=
3
;
samples_per_pixel
=
3
;
...
@@ -299,7 +299,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
...
@@ -299,7 +299,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
image_length
=
t4_t6_decode_get_image_length
(
&
s
->
decoder
.
t4_t6
);
image_length
=
t4_t6_decode_get_image_length
(
&
s
->
decoder
.
t4_t6
);
break
;
break
;
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
image_length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
image_length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
break
;
break
;
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
...
@@ -454,7 +454,7 @@ SPAN_DECLARE(int) t4_rx_put(t4_rx_state_t *s, const uint8_t buf[], size_t len)
...
@@ -454,7 +454,7 @@ SPAN_DECLARE(int) t4_rx_put(t4_rx_state_t *s, const uint8_t buf[], size_t len)
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
t4_t6_decode_put
(
&
s
->
decoder
.
t4_t6
,
buf
,
len
);
return
t4_t6_decode_put
(
&
s
->
decoder
.
t4_t6
,
buf
,
len
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
return
t42_decode_put
(
&
s
->
decoder
.
t42
,
buf
,
len
);
return
t42_decode_put
(
&
s
->
decoder
.
t42
,
buf
,
len
);
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
case
T4_COMPRESSION_T43
:
...
@@ -529,10 +529,10 @@ SPAN_DECLARE(int) t4_rx_set_rx_encoding(t4_rx_state_t *s, int encoding)
...
@@ -529,10 +529,10 @@ SPAN_DECLARE(int) t4_rx_set_rx_encoding(t4_rx_state_t *s, int encoding)
}
}
s
->
line_encoding
=
encoding
;
s
->
line_encoding
=
encoding
;
return
t4_t6_decode_set_encoding
(
&
s
->
decoder
.
t4_t6
,
encoding
);
return
t4_t6_decode_set_encoding
(
&
s
->
decoder
.
t4_t6
,
encoding
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
switch
(
s
->
line_encoding
)
switch
(
s
->
line_encoding
)
{
{
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
break
;
break
;
default
:
default
:
t42_decode_init
(
&
s
->
decoder
.
t42
,
s
->
row_handler
,
s
->
row_handler_user_data
);
t42_decode_init
(
&
s
->
decoder
.
t42
,
s
->
row_handler
,
s
->
row_handler_user_data
);
...
@@ -599,7 +599,7 @@ SPAN_DECLARE(int) t4_rx_set_row_write_handler(t4_rx_state_t *s, t4_row_write_han
...
@@ -599,7 +599,7 @@ SPAN_DECLARE(int) t4_rx_set_row_write_handler(t4_rx_state_t *s, t4_row_write_han
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
t4_t6_decode_set_row_write_handler
(
&
s
->
decoder
.
t4_t6
,
handler
,
user_data
);
return
t4_t6_decode_set_row_write_handler
(
&
s
->
decoder
.
t4_t6
,
handler
,
user_data
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
return
t42_decode_set_row_write_handler
(
&
s
->
decoder
.
t42
,
handler
,
user_data
);
return
t42_decode_set_row_write_handler
(
&
s
->
decoder
.
t42
,
handler
,
user_data
);
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
case
T4_COMPRESSION_T43
:
...
@@ -638,7 +638,7 @@ SPAN_DECLARE(void) t4_rx_get_transfer_statistics(t4_rx_state_t *s, t4_stats_t *t
...
@@ -638,7 +638,7 @@ SPAN_DECLARE(void) t4_rx_get_transfer_statistics(t4_rx_state_t *s, t4_stats_t *t
t
->
bad_rows
=
s
->
decoder
.
t4_t6
.
bad_rows
;
t
->
bad_rows
=
s
->
decoder
.
t4_t6
.
bad_rows
;
t
->
longest_bad_row_run
=
s
->
decoder
.
t4_t6
.
longest_bad_row_run
;
t
->
longest_bad_row_run
=
s
->
decoder
.
t4_t6
.
longest_bad_row_run
;
break
;
break
;
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
t
->
type
=
0
;
t
->
type
=
0
;
t
->
width
=
t42_decode_get_image_width
(
&
s
->
decoder
.
t42
);
t
->
width
=
t42_decode_get_image_width
(
&
s
->
decoder
.
t42
);
t
->
length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
t
->
length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
...
@@ -683,7 +683,7 @@ SPAN_DECLARE(int) t4_rx_start_page(t4_rx_state_t *s)
...
@@ -683,7 +683,7 @@ SPAN_DECLARE(int) t4_rx_start_page(t4_rx_state_t *s)
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
t4_t6_decode_restart
(
&
s
->
decoder
.
t4_t6
,
s
->
image_width
);
t4_t6_decode_restart
(
&
s
->
decoder
.
t4_t6
,
s
->
image_width
);
break
;
break
;
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
t42_decode_restart
(
&
s
->
decoder
.
t42
);
t42_decode_restart
(
&
s
->
decoder
.
t42
);
break
;
break
;
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
...
@@ -740,7 +740,7 @@ SPAN_DECLARE(int) t4_rx_end_page(t4_rx_state_t *s)
...
@@ -740,7 +740,7 @@ SPAN_DECLARE(int) t4_rx_end_page(t4_rx_state_t *s)
t4_t6_decode_put
(
&
s
->
decoder
.
t4_t6
,
NULL
,
0
);
t4_t6_decode_put
(
&
s
->
decoder
.
t4_t6
,
NULL
,
0
);
length
=
t4_t6_decode_get_image_length
(
&
s
->
decoder
.
t4_t6
);
length
=
t4_t6_decode_get_image_length
(
&
s
->
decoder
.
t4_t6
);
break
;
break
;
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
t42_decode_put
(
&
s
->
decoder
.
t42
,
NULL
,
0
);
t42_decode_put
(
&
s
->
decoder
.
t42
,
NULL
,
0
);
length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
break
;
break
;
...
@@ -840,7 +840,7 @@ SPAN_DECLARE(int) t4_rx_release(t4_rx_state_t *s)
...
@@ -840,7 +840,7 @@ SPAN_DECLARE(int) t4_rx_release(t4_rx_state_t *s)
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
t4_t6_decode_release
(
&
s
->
decoder
.
t4_t6
);
return
t4_t6_decode_release
(
&
s
->
decoder
.
t4_t6
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
return
t42_decode_release
(
&
s
->
decoder
.
t42
);
return
t42_decode_release
(
&
s
->
decoder
.
t42
);
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
case
T4_COMPRESSION_T43
:
...
...
libs/spandsp/src/t4_tx.c
浏览文件 @
f758d53e
...
@@ -642,7 +642,7 @@ static int set_row_read_handler(t4_tx_state_t *s, t4_row_read_handler_t handler,
...
@@ -642,7 +642,7 @@ static int set_row_read_handler(t4_tx_state_t *s, t4_row_read_handler_t handler,
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
t4_t6_encode_set_row_read_handler
(
&
s
->
encoder
.
t4_t6
,
handler
,
user_data
);
return
t4_t6_encode_set_row_read_handler
(
&
s
->
encoder
.
t4_t6
,
handler
,
user_data
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
return
t42_encode_set_row_read_handler
(
&
s
->
encoder
.
t42
,
handler
,
user_data
);
return
t42_encode_set_row_read_handler
(
&
s
->
encoder
.
t42
,
handler
,
user_data
);
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
case
T4_COMPRESSION_T43
:
...
@@ -812,10 +812,10 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
...
@@ -812,10 +812,10 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
}
}
s
->
line_encoding
=
encoding
;
s
->
line_encoding
=
encoding
;
return
t4_t6_encode_set_encoding
(
&
s
->
encoder
.
t4_t6
,
encoding
);
return
t4_t6_encode_set_encoding
(
&
s
->
encoder
.
t4_t6
,
encoding
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
switch
(
s
->
line_encoding
)
switch
(
s
->
line_encoding
)
{
{
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
break
;
break
;
default
:
default
:
t42_encode_init
(
&
s
->
encoder
.
t42
,
s
->
image_width
,
s
->
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
t42_encode_init
(
&
s
->
encoder
.
t42
,
s
->
image_width
,
s
->
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
...
@@ -877,7 +877,7 @@ SPAN_DECLARE(void) t4_tx_set_image_width(t4_tx_state_t *s, int image_width)
...
@@ -877,7 +877,7 @@ SPAN_DECLARE(void) t4_tx_set_image_width(t4_tx_state_t *s, int image_width)
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
t4_t6_encode_set_image_width
(
&
s
->
encoder
.
t4_t6
,
image_width
);
t4_t6_encode_set_image_width
(
&
s
->
encoder
.
t4_t6
,
image_width
);
break
;
break
;
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
t42_encode_set_image_width
(
&
s
->
encoder
.
t42
,
image_width
);
t42_encode_set_image_width
(
&
s
->
encoder
.
t42
,
image_width
);
break
;
break
;
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
...
@@ -898,7 +898,7 @@ static void t4_tx_set_image_length(t4_tx_state_t *s, int image_length)
...
@@ -898,7 +898,7 @@ static void t4_tx_set_image_length(t4_tx_state_t *s, int image_length)
s
->
image_length
=
image_length
;
s
->
image_length
=
image_length
;
switch
(
s
->
line_encoding
)
switch
(
s
->
line_encoding
)
{
{
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
t42_encode_set_image_length
(
&
s
->
encoder
.
t42
,
image_length
);
t42_encode_set_image_length
(
&
s
->
encoder
.
t42
,
image_length
);
break
;
break
;
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
...
@@ -1014,7 +1014,7 @@ SPAN_DECLARE(void) t4_tx_get_transfer_statistics(t4_tx_state_t *s, t4_stats_t *t
...
@@ -1014,7 +1014,7 @@ SPAN_DECLARE(void) t4_tx_get_transfer_statistics(t4_tx_state_t *s, t4_stats_t *t
t
->
length
=
t4_t6_encode_get_image_length
(
&
s
->
encoder
.
t4_t6
)
/
s
->
row_squashing_ratio
;
t
->
length
=
t4_t6_encode_get_image_length
(
&
s
->
encoder
.
t4_t6
)
/
s
->
row_squashing_ratio
;
t
->
line_image_size
=
t4_t6_encode_get_compressed_image_size
(
&
s
->
encoder
.
t4_t6
)
/
8
;
t
->
line_image_size
=
t4_t6_encode_get_compressed_image_size
(
&
s
->
encoder
.
t4_t6
)
/
8
;
break
;
break
;
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
t
->
type
=
0
;
t
->
type
=
0
;
t
->
width
=
t42_encode_get_image_width
(
&
s
->
encoder
.
t42
);
t
->
width
=
t42_encode_get_image_width
(
&
s
->
encoder
.
t42
);
t
->
length
=
t42_encode_get_image_length
(
&
s
->
encoder
.
t42
)
/
s
->
row_squashing_ratio
;
t
->
length
=
t42_encode_get_image_length
(
&
s
->
encoder
.
t42
)
/
s
->
row_squashing_ratio
;
...
@@ -1047,7 +1047,7 @@ SPAN_DECLARE(int) t4_tx_image_complete(t4_tx_state_t *s)
...
@@ -1047,7 +1047,7 @@ SPAN_DECLARE(int) t4_tx_image_complete(t4_tx_state_t *s)
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
t4_t6_encode_image_complete
(
&
s
->
encoder
.
t4_t6
);
return
t4_t6_encode_image_complete
(
&
s
->
encoder
.
t4_t6
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
return
t42_encode_image_complete
(
&
s
->
encoder
.
t42
);
return
t42_encode_image_complete
(
&
s
->
encoder
.
t42
);
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
case
T4_COMPRESSION_T43
:
...
@@ -1076,7 +1076,7 @@ SPAN_DECLARE(int) t4_tx_get(t4_tx_state_t *s, uint8_t buf[], size_t max_len)
...
@@ -1076,7 +1076,7 @@ SPAN_DECLARE(int) t4_tx_get(t4_tx_state_t *s, uint8_t buf[], size_t max_len)
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
t4_t6_encode_get
(
&
s
->
encoder
.
t4_t6
,
buf
,
max_len
);
return
t4_t6_encode_get
(
&
s
->
encoder
.
t4_t6
,
buf
,
max_len
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
return
t42_encode_get
(
&
s
->
encoder
.
t42
,
buf
,
max_len
);
return
t42_encode_get
(
&
s
->
encoder
.
t42
,
buf
,
max_len
);
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
case
T4_COMPRESSION_T43
:
...
@@ -1115,7 +1115,7 @@ SPAN_DECLARE(int) t4_tx_start_page(t4_tx_state_t *s)
...
@@ -1115,7 +1115,7 @@ SPAN_DECLARE(int) t4_tx_start_page(t4_tx_state_t *s)
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
t4_t6_encode_restart
(
&
s
->
encoder
.
t4_t6
,
s
->
image_width
);
t4_t6_encode_restart
(
&
s
->
encoder
.
t4_t6
,
s
->
image_width
);
break
;
break
;
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
t42_encode_restart
(
&
s
->
encoder
.
t42
,
s
->
image_width
,
s
->
image_length
);
t42_encode_restart
(
&
s
->
encoder
.
t42
,
s
->
image_width
,
s
->
image_length
);
break
;
break
;
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
...
@@ -1237,7 +1237,7 @@ SPAN_DECLARE(int) t4_tx_release(t4_tx_state_t *s)
...
@@ -1237,7 +1237,7 @@ SPAN_DECLARE(int) t4_tx_release(t4_tx_state_t *s)
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T4_2D
:
case
T4_COMPRESSION_T6
:
case
T4_COMPRESSION_T6
:
return
t4_t6_encode_release
(
&
s
->
encoder
.
t4_t6
);
return
t4_t6_encode_release
(
&
s
->
encoder
.
t4_t6
);
case
T4_COMPRESSION_T42
:
case
T4_COMPRESSION_T42
_T81
:
return
t42_encode_release
(
&
s
->
encoder
.
t42
);
return
t42_encode_release
(
&
s
->
encoder
.
t42
);
#if defined(SPANDSP_SUPPORT_T43)
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
case
T4_COMPRESSION_T43
:
...
...
libs/spandsp/src/v18.c
浏览文件 @
f758d53e
...
@@ -629,35 +629,64 @@ SPAN_DECLARE(uint8_t) v18_decode_baudot(v18_state_t *s, uint8_t ch)
...
@@ -629,35 +629,64 @@ SPAN_DECLARE(uint8_t) v18_decode_baudot(v18_state_t *s, uint8_t ch)
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
static
void
v18_rx_dtmf
(
void
*
user_data
,
const
char
digits
[],
int
len
)
static
int
v18_tdd_get_async_byte
(
void
*
user_data
)
{
{
#if 0
v18_state_t
*
s
;
v18_state_t
*
s
;
int
ch
;
unsigned
int
x
;
s
=
(
v18_state_t
*
)
user_data
;
s
=
(
v18_state_t
*
)
user_data
;
#endif
if
(
s
->
next_byte
!=
0xFF
)
{
s
->
rx_suppression
=
(
300
*
SAMPLE_RATE
)
/
1000
;
x
=
s
->
next_byte
;
s
->
next_byte
=
(
uint8_t
)
0xFF
;
return
x
;
}
if
((
ch
=
queue_read_byte
(
&
s
->
queue
.
queue
))
>=
0
)
return
ch
;
if
(
s
->
tx_signal_on
)
{
/* The FSK should now be switched off. */
s
->
tx_signal_on
=
FALSE
;
}
return
0x1F
;
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
static
int
v18_tdd_get_async_byte
(
void
*
user_data
)
static
void
v18_dtmf_get
(
void
*
user_data
)
{
{
v18_state_t
*
s
;
v18_state_t
*
s
;
int
ch
;
int
ch
;
const
char
*
v
;
s
=
(
v18_state_t
*
)
user_data
;
s
=
(
v18_state_t
*
)
user_data
;
if
((
ch
=
queue_read_byte
(
&
s
->
queue
.
queue
))
>=
0
)
if
((
ch
=
queue_read_byte
(
&
s
->
queue
.
queue
))
>=
0
)
return
ch
;
if
(
s
->
tx_signal_on
)
{
{
/* The FSK should now be switched off. */
v
=
ascii_to_dtmf
[
ch
&
0x7F
];
s
->
tx_signal_on
=
FALSE
;
dtmf_tx_put
(
&
s
->
dtmftx
,
v
,
strlen
(
v
));
s
->
rx_suppression
=
((
300
+
100
*
strlen
(
v
))
*
SAMPLE_RATE
)
/
1000
;
}
}
return
0x1F
;
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
static
int
v18_edt_get_async_byte
(
void
*
user_data
)
static
int
v18_edt_get_async_byte
(
void
*
user_data
)
{
{
v18_state_t
*
s
;
int
ch
;
s
=
(
v18_state_t
*
)
user_data
;
if
((
ch
=
queue_read_byte
(
&
s
->
queue
.
queue
))
>=
0
)
{
s
->
rx_suppression
=
(
300
*
SAMPLE_RATE
)
/
1000
;
return
ch
;
}
if
(
s
->
tx_signal_on
)
{
/* The FSK should now be switched off. */
s
->
tx_signal_on
=
FALSE
;
}
return
0
;
return
0
;
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
...
@@ -709,23 +738,62 @@ static void v18_tdd_put_async_byte(void *user_data, int byte)
...
@@ -709,23 +738,62 @@ static void v18_tdd_put_async_byte(void *user_data, int byte)
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
static
void
v18_dtmf_put
(
void
*
user_data
,
const
char
dtmf
[],
int
len
)
{
v18_state_t
*
s
;
char
buf
[
128
];
int
i
;
s
=
(
v18_state_t
*
)
user_data
;
if
(
s
->
rx_suppression
>
0
)
return
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
s
->
rx_msg
[
s
->
rx_msg_len
++
]
=
dtmf
[
i
];
if
(
dtmf
[
i
]
>=
'0'
&&
dtmf
[
i
]
<=
'9'
)
{
s
->
rx_msg
[
s
->
rx_msg_len
]
=
'\0'
;
if
(
v18_decode_dtmf
(
s
,
buf
,
(
const
char
*
)
s
->
rx_msg
)
>
0
)
s
->
put_msg
(
s
->
user_data
,
(
const
uint8_t
*
)
buf
,
1
);
s
->
rx_msg_len
=
0
;
}
}
}
/*- End of function --------------------------------------------------------*/
static
void
v18_edt_put_async_byte
(
void
*
user_data
,
int
byte
)
static
void
v18_edt_put_async_byte
(
void
*
user_data
,
int
byte
)
{
{
v18_state_t
*
s
;
s
=
(
v18_state_t
*
)
user_data
;
if
(
s
->
rx_suppression
>
0
)
return
;
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
static
void
v18_bell103_put_async_byte
(
void
*
user_data
,
int
byte
)
static
void
v18_bell103_put_async_byte
(
void
*
user_data
,
int
byte
)
{
{
v18_state_t
*
s
;
s
=
(
v18_state_t
*
)
user_data
;
if
(
s
->
rx_suppression
>
0
)
return
;
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
static
void
v18_videotex_put_async_byte
(
void
*
user_data
,
int
byte
)
static
void
v18_videotex_put_async_byte
(
void
*
user_data
,
int
byte
)
{
{
v18_state_t
*
s
;
s
=
(
v18_state_t
*
)
user_data
;
if
(
s
->
rx_suppression
>
0
)
return
;
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
static
void
v18_textphone_put_async_byte
(
void
*
user_data
,
int
byte
)
static
void
v18_textphone_put_async_byte
(
void
*
user_data
,
int
byte
)
{
{
v18_state_t
*
s
;
s
=
(
v18_state_t
*
)
user_data
;
if
(
s
->
rx_suppression
>
0
)
return
;
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
...
@@ -759,6 +827,13 @@ SPAN_DECLARE_NONSTD(int) v18_tx(v18_state_t *s, int16_t *amp, int max_len)
...
@@ -759,6 +827,13 @@ SPAN_DECLARE_NONSTD(int) v18_tx(v18_state_t *s, int16_t *amp, int max_len)
SPAN_DECLARE_NONSTD
(
int
)
v18_rx
(
v18_state_t
*
s
,
const
int16_t
amp
[],
int
len
)
SPAN_DECLARE_NONSTD
(
int
)
v18_rx
(
v18_state_t
*
s
,
const
int16_t
amp
[],
int
len
)
{
{
if
(
s
->
rx_suppression
>
0
)
{
if
(
s
->
rx_suppression
>
len
)
s
->
rx_suppression
-=
len
;
else
s
->
rx_suppression
=
0
;
}
switch
(
s
->
mode
)
switch
(
s
->
mode
)
{
{
case
V18_MODE_DTMF
:
case
V18_MODE_DTMF
:
...
@@ -776,6 +851,32 @@ SPAN_DECLARE_NONSTD(int) v18_rx(v18_state_t *s, const int16_t amp[], int len)
...
@@ -776,6 +851,32 @@ SPAN_DECLARE_NONSTD(int) v18_rx(v18_state_t *s, const int16_t amp[], int len)
}
}
/*- End of function --------------------------------------------------------*/
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE_NONSTD
(
int
)
v18_rx_fillin
(
v18_state_t
*
s
,
int
len
)
{
if
(
s
->
rx_suppression
>
0
)
{
if
(
s
->
rx_suppression
>
len
)
s
->
rx_suppression
-=
len
;
else
s
->
rx_suppression
=
0
;
}
switch
(
s
->
mode
)
{
case
V18_MODE_DTMF
:
/* Apply a message timeout. */
//s->in_progress -= len;
//if (s->in_progress <= 0)
// s->rx_msg_len = 0;
dtmf_rx_fillin
(
&
s
->
dtmfrx
,
len
);
break
;
default
:
fsk_rx_fillin
(
&
s
->
fskrx
,
len
);
break
;
}
return
0
;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
v18_put
(
v18_state_t
*
s
,
const
char
msg
[],
int
len
)
SPAN_DECLARE
(
int
)
v18_put
(
v18_state_t
*
s
,
const
char
msg
[],
int
len
)
{
{
char
buf
[
256
+
1
];
char
buf
[
256
+
1
];
...
@@ -819,7 +920,7 @@ SPAN_DECLARE(int) v18_put(v18_state_t *s, const char msg[], int len)
...
@@ -819,7 +920,7 @@ SPAN_DECLARE(int) v18_put(v18_state_t *s, const char msg[], int len)
SPAN_DECLARE
(
const
char
*
)
v18_mode_to_str
(
int
mode
)
SPAN_DECLARE
(
const
char
*
)
v18_mode_to_str
(
int
mode
)
{
{
switch
(
mode
&
0xFF
)
switch
(
(
mode
&
0xFF
)
)
{
{
case
V18_MODE_NONE
:
case
V18_MODE_NONE
:
return
"None"
;
return
"None"
;
...
@@ -870,6 +971,7 @@ SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
...
@@ -870,6 +971,7 @@ SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
switch
(
s
->
mode
)
switch
(
s
->
mode
)
{
{
case
V18_MODE_5BIT_45
:
case
V18_MODE_5BIT_45
:
s
->
repeat_shifts
=
mode
&
0x100
;
fsk_tx_init
(
&
s
->
fsktx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT
],
async_tx_get_bit
,
&
s
->
asynctx
);
fsk_tx_init
(
&
s
->
fsktx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT
],
async_tx_get_bit
,
&
s
->
asynctx
);
async_tx_init
(
&
s
->
asynctx
,
5
,
ASYNC_PARITY_NONE
,
2
,
FALSE
,
v18_tdd_get_async_byte
,
s
);
async_tx_init
(
&
s
->
asynctx
,
5
,
ASYNC_PARITY_NONE
,
2
,
FALSE
,
v18_tdd_get_async_byte
,
s
);
/* Schedule an explicit shift at the start of baudot transmission */
/* Schedule an explicit shift at the start of baudot transmission */
...
@@ -878,9 +980,10 @@ SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
...
@@ -878,9 +980,10 @@ SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
ride over the fraction. */
ride over the fraction. */
fsk_rx_init
(
&
s
->
fskrx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT
],
FSK_FRAME_MODE_5N1_FRAMES
,
v18_tdd_put_async_byte
,
s
);
fsk_rx_init
(
&
s
->
fskrx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT
],
FSK_FRAME_MODE_5N1_FRAMES
,
v18_tdd_put_async_byte
,
s
);
s
->
baudot_rx_shift
=
0
;
s
->
baudot_rx_shift
=
0
;
s
->
repeat_shifts
=
mode
&
0x100
;
s
->
next_byte
=
(
uint8_t
)
0xFF
;
break
;
break
;
case
V18_MODE_5BIT_50
:
case
V18_MODE_5BIT_50
:
s
->
repeat_shifts
=
mode
&
0x100
;
fsk_tx_init
(
&
s
->
fsktx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT50
],
async_tx_get_bit
,
&
s
->
asynctx
);
fsk_tx_init
(
&
s
->
fsktx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT50
],
async_tx_get_bit
,
&
s
->
asynctx
);
async_tx_init
(
&
s
->
asynctx
,
5
,
ASYNC_PARITY_NONE
,
2
,
FALSE
,
v18_tdd_get_async_byte
,
s
);
async_tx_init
(
&
s
->
asynctx
,
5
,
ASYNC_PARITY_NONE
,
2
,
FALSE
,
v18_tdd_get_async_byte
,
s
);
/* Schedule an explicit shift at the start of baudot transmission */
/* Schedule an explicit shift at the start of baudot transmission */
...
@@ -889,11 +992,11 @@ SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
...
@@ -889,11 +992,11 @@ SPAN_DECLARE(v18_state_t *) v18_init(v18_state_t *s,
ride over the fraction. */
ride over the fraction. */
fsk_rx_init
(
&
s
->
fskrx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT50
],
FSK_FRAME_MODE_5N1_FRAMES
,
v18_tdd_put_async_byte
,
s
);
fsk_rx_init
(
&
s
->
fskrx
,
&
preset_fsk_specs
[
FSK_WEITBRECHT50
],
FSK_FRAME_MODE_5N1_FRAMES
,
v18_tdd_put_async_byte
,
s
);
s
->
baudot_rx_shift
=
0
;
s
->
baudot_rx_shift
=
0
;
s
->
repeat_shifts
=
mode
&
0x100
;
s
->
next_byte
=
(
uint8_t
)
0xFF
;
break
;
break
;
case
V18_MODE_DTMF
:
case
V18_MODE_DTMF
:
dtmf_tx_init
(
&
s
->
dtmftx
,
NULL
,
NULL
);
dtmf_tx_init
(
&
s
->
dtmftx
,
v18_dtmf_get
,
s
);
dtmf_rx_init
(
&
s
->
dtmfrx
,
v18_
rx_dtmf
,
s
);
dtmf_rx_init
(
&
s
->
dtmfrx
,
v18_
dtmf_put
,
s
);
break
;
break
;
case
V18_MODE_EDT
:
case
V18_MODE_EDT
:
fsk_tx_init
(
&
s
->
fsktx
,
&
preset_fsk_specs
[
FSK_V21CH1_110
],
async_tx_get_bit
,
&
s
->
asynctx
);
fsk_tx_init
(
&
s
->
fsktx
,
&
preset_fsk_specs
[
FSK_V21CH1_110
],
async_tx_get_bit
,
&
s
->
asynctx
);
...
...
libs/spandsp/test-data/itu/fax/generate_striped_pages.c
浏览文件 @
f758d53e
...
@@ -108,7 +108,7 @@ int main(int argc, char *argv[])
...
@@ -108,7 +108,7 @@ int main(int argc, char *argv[])
image_size
=
IMAGE_WIDTH
*
ROWS_PER_STRIPE
/
8
;
image_size
=
IMAGE_WIDTH
*
ROWS_PER_STRIPE
/
8
;
memset
(
image_buffer
,
0x18
,
image_size
);
memset
(
image_buffer
,
0x18
,
image_size
);
for
(
i
=
0
;
i
<
IMAGE_LENGTH
/
ROWS_PER_STRIPE
;
i
++
)
for
(
i
=
0
;
i
*
ROWS_PER_STRIPE
<
IMAGE_LENGTH
;
i
++
)
{
{
if
(
IMAGE_LENGTH
>
(
i
+
1
)
*
ROWS_PER_STRIPE
)
if
(
IMAGE_LENGTH
>
(
i
+
1
)
*
ROWS_PER_STRIPE
)
image_size
=
IMAGE_WIDTH
*
ROWS_PER_STRIPE
/
8
;
image_size
=
IMAGE_WIDTH
*
ROWS_PER_STRIPE
/
8
;
...
...
libs/spandsp/tests/async_tests.c
浏览文件 @
f758d53e
...
@@ -59,6 +59,7 @@ int v14_test_async_tx_get_bit(void *user_data)
...
@@ -59,6 +59,7 @@ int v14_test_async_tx_get_bit(void *user_data)
{
{
async_tx_state_t
*
s
;
async_tx_state_t
*
s
;
int
bit
;
int
bit
;
int
parity_bit
;
static
int
destuff
=
0
;
static
int
destuff
=
0
;
/* Special routine to test V.14 rate adaption, by randomly skipping
/* Special routine to test V.14 rate adaption, by randomly skipping
...
@@ -66,42 +67,39 @@ int v14_test_async_tx_get_bit(void *user_data)
...
@@ -66,42 +67,39 @@ int v14_test_async_tx_get_bit(void *user_data)
s
=
(
async_tx_state_t
*
)
user_data
;
s
=
(
async_tx_state_t
*
)
user_data
;
if
(
s
->
bitpos
==
0
)
if
(
s
->
bitpos
==
0
)
{
{
s
->
byte_in_progress
=
s
->
get_byte
(
s
->
user_data
);
s
->
byte_in_progress
&=
(
0xFFFF
>>
(
16
-
s
->
data_bits
));
if
(
s
->
parity
)
{
parity_bit
=
parity8
(
s
->
byte_in_progress
);
if
(
s
->
parity
==
ASYNC_PARITY_ODD
)
parity_bit
^=
1
;
s
->
byte_in_progress
|=
(
parity_bit
<<
s
->
data_bits
);
s
->
byte_in_progress
|=
(
0xFFFF
<<
(
s
->
data_bits
+
1
));
}
else
{
s
->
byte_in_progress
|=
(
0xFFFF
<<
s
->
data_bits
);
}
/* Start bit */
/* Start bit */
bit
=
0
;
bit
=
0
;
s
->
byte_in_progress
=
s
->
get_byte
(
s
->
user_data
);
s
->
parity_bit
=
0
;
s
->
bitpos
++
;
s
->
bitpos
++
;
}
}
else
if
(
s
->
bitpos
<=
s
->
data_bits
)
else
{
{
bit
=
s
->
byte_in_progress
&
1
;
bit
=
s
->
byte_in_progress
&
1
;
s
->
byte_in_progress
>>=
1
;
s
->
byte_in_progress
>>=
1
;
s
->
parity_bit
^=
bit
;
/* Drop the stop bit on every fourth character for V.14 simulation */
s
->
bitpos
++
;
if
((
++
destuff
&
3
)
==
0
)
if
(
!
s
->
parity
&&
s
->
bitpos
==
s
->
data_bits
+
1
)
{
{
/* Drop the stop bit on every fourth character for V.14 simulation*/
if
(
++
s
->
bitpos
>
s
->
total_bits
-
1
)
if
((
++
destuff
&
3
)
==
0
)
s
->
bitpos
=
0
;
}
else
{
if
(
++
s
->
bitpos
>
s
->
total_bits
)
s
->
bitpos
=
0
;
s
->
bitpos
=
0
;
}
}
}
else
if
(
s
->
parity
&&
s
->
bitpos
==
s
->
data_bits
+
1
)
{
if
(
s
->
parity
==
ASYNC_PARITY_ODD
)
s
->
parity_bit
^=
1
;
bit
=
s
->
parity_bit
;
s
->
bitpos
++
;
/* Drop the stop bit on every fourth character for V.14 simulation */
if
((
++
destuff
&
3
)
==
0
)
s
->
bitpos
=
0
;
}
else
{
/* Stop bit(s) */
bit
=
1
;
s
->
bitpos
++
;
if
(
s
->
bitpos
>
s
->
data_bits
+
s
->
stop_bits
)
s
->
bitpos
=
0
;
}
}
return
bit
;
return
bit
;
}
}
...
@@ -207,7 +205,7 @@ int main(int argc, char *argv[])
...
@@ -207,7 +205,7 @@ int main(int argc, char *argv[])
async_rx_put_bit
(
&
rx_async
,
bit
);
async_rx_put_bit
(
&
rx_async
,
bit
);
}
}
printf
(
"Chars=%d/%d, PE=%d, FE=%d
\n
"
,
tx_async_chars
,
rx_async_chars
,
rx_async
.
parity_errors
,
rx_async
.
framing_errors
);
printf
(
"Chars=%d/%d, PE=%d, FE=%d
\n
"
,
tx_async_chars
,
rx_async_chars
,
rx_async
.
parity_errors
,
rx_async
.
framing_errors
);
if
(
tx_async_chars
!=
rx_async_chars
+
1
if
(
tx_async_chars
!=
rx_async_chars
||
||
rx_async
.
parity_errors
rx_async
.
parity_errors
||
||
...
...
libs/spandsp/tests/fax_tests.c
浏览文件 @
f758d53e
...
@@ -846,18 +846,20 @@ int main(int argc, char *argv[])
...
@@ -846,18 +846,20 @@ int main(int argc, char *argv[])
|
T30_SUPPORT_255MM_WIDTH
|
T30_SUPPORT_255MM_WIDTH
|
T30_SUPPORT_303MM_WIDTH
);
|
T30_SUPPORT_303MM_WIDTH
);
t30_set_supported_resolutions
(
t30_state
[
i
],
t30_set_supported_resolutions
(
t30_state
[
i
],
T30_SUPPORT_STANDARD_RESOLUTION
T30_SUPPORT_RESOLUTION_R8_STANDARD
|
T30_SUPPORT_FINE_RESOLUTION
|
T30_SUPPORT_RESOLUTION_R8_FINE
|
T30_SUPPORT_SUPERFINE_RESOLUTION
|
T30_SUPPORT_RESOLUTION_R8_SUPERFINE
|
T30_SUPPORT_R8_RESOLUTION
|
T30_SUPPORT_RESOLUTION_R16_SUPERFINE
|
T30_SUPPORT_R16_RESOLUTION
|
T30_SUPPORT_RESOLUTION_200_100
|
T30_SUPPORT_300_300_RESOLUTION
|
T30_SUPPORT_RESOLUTION_200_200
|
T30_SUPPORT_400_400_RESOLUTION
|
T30_SUPPORT_RESOLUTION_200_400
|
T30_SUPPORT_600_600_RESOLUTION
|
T30_SUPPORT_RESOLUTION_300_300
|
T30_SUPPORT_1200_1200_RESOLUTION
|
T30_SUPPORT_RESOLUTION_300_600
|
T30_SUPPORT_300_600_RESOLUTION
|
T30_SUPPORT_RESOLUTION_400_400
|
T30_SUPPORT_400_800_RESOLUTION
|
T30_SUPPORT_RESOLUTION_400_800
|
T30_SUPPORT_600_1200_RESOLUTION
);
|
T30_SUPPORT_RESOLUTION_600_600
|
T30_SUPPORT_RESOLUTION_600_1200
|
T30_SUPPORT_RESOLUTION_1200_1200
);
//t30_set_rx_encoding(t30_state[i], T4_COMPRESSION_T85);
//t30_set_rx_encoding(t30_state[i], T4_COMPRESSION_T85);
t30_set_ecm_capability
(
t30_state
[
i
],
use_ecm
);
t30_set_ecm_capability
(
t30_state
[
i
],
use_ecm
);
if
(
use_ecm
)
if
(
use_ecm
)
...
...
libs/spandsp/tests/fax_tests.sh
浏览文件 @
f758d53e
...
@@ -43,6 +43,19 @@ ITUTESTS_DIR=../test-data/itu/fax
...
@@ -43,6 +43,19 @@ ITUTESTS_DIR=../test-data/itu/fax
for
OPTS
in
"-p AA"
"-p AA -e"
"-p TT"
"-p TT -e"
"-p GG"
"-p GG -e"
"-p TG"
"-p TG -e"
"-p GT"
"-p GT -e"
for
OPTS
in
"-p AA"
"-p AA -e"
"-p TT"
"-p TT -e"
"-p GG"
"-p GG -e"
"-p TG"
"-p TG -e"
"-p GT"
"-p GT -e"
do
do
FILE
=
"
${
ITUTESTS_DIR
}
/itutests.tif"
run_fax_test
FILE
=
"
${
ITUTESTS_DIR
}
/100pages.tif"
run_fax_test
FILE
=
"
${
ITUTESTS_DIR
}
/striped.tif"
run_fax_test
FILE
=
"
${
ITUTESTS_DIR
}
/mixed_size_pages.tif"
run_fax_test
FILE
=
"
${
ITUTESTS_DIR
}
/bilevel_R8_385_A4.tif"
FILE
=
"
${
ITUTESTS_DIR
}
/bilevel_R8_385_A4.tif"
run_fax_test
run_fax_test
...
...
libs/spandsp/tests/tsb85_tests.c
浏览文件 @
f758d53e
...
@@ -393,18 +393,20 @@ static void fax_prepare(void)
...
@@ -393,18 +393,20 @@ static void fax_prepare(void)
|
T30_SUPPORT_255MM_WIDTH
|
T30_SUPPORT_255MM_WIDTH
|
T30_SUPPORT_303MM_WIDTH
);
|
T30_SUPPORT_303MM_WIDTH
);
t30_set_supported_resolutions
(
t30
,
t30_set_supported_resolutions
(
t30
,
T30_SUPPORT_STANDARD_RESOLUTION
T30_SUPPORT_RESOLUTION_R8_STANDARD
|
T30_SUPPORT_FINE_RESOLUTION
|
T30_SUPPORT_RESOLUTION_R8_FINE
|
T30_SUPPORT_SUPERFINE_RESOLUTION
|
T30_SUPPORT_RESOLUTION_R8_SUPERFINE
|
T30_SUPPORT_R8_RESOLUTION
|
T30_SUPPORT_RESOLUTION_R16_SUPERFINE
|
T30_SUPPORT_R16_RESOLUTION
|
T30_SUPPORT_RESOLUTION_200_100
|
T30_SUPPORT_300_300_RESOLUTION
|
T30_SUPPORT_RESOLUTION_200_200
|
T30_SUPPORT_400_400_RESOLUTION
|
T30_SUPPORT_RESOLUTION_200_400
|
T30_SUPPORT_600_600_RESOLUTION
|
T30_SUPPORT_RESOLUTION_300_300
|
T30_SUPPORT_1200_1200_RESOLUTION
|
T30_SUPPORT_RESOLUTION_300_600
|
T30_SUPPORT_300_600_RESOLUTION
|
T30_SUPPORT_RESOLUTION_400_400
|
T30_SUPPORT_400_800_RESOLUTION
|
T30_SUPPORT_RESOLUTION_400_800
|
T30_SUPPORT_600_1200_RESOLUTION
);
|
T30_SUPPORT_RESOLUTION_600_600
|
T30_SUPPORT_RESOLUTION_600_1200
|
T30_SUPPORT_RESOLUTION_1200_1200
);
t30_set_supported_modems
(
t30
,
T30_SUPPORT_V27TER
|
T30_SUPPORT_V29
|
T30_SUPPORT_V17
);
t30_set_supported_modems
(
t30
,
T30_SUPPORT_V27TER
|
T30_SUPPORT_V29
|
T30_SUPPORT_V17
);
t30_set_supported_compressions
(
t30
,
T30_SUPPORT_COMPRESSION_T4_1D
|
T30_SUPPORT_COMPRESSION_T4_2D
|
T30_SUPPORT_COMPRESSION_T6
);
t30_set_supported_compressions
(
t30
,
T30_SUPPORT_COMPRESSION_T4_1D
|
T30_SUPPORT_COMPRESSION_T4_2D
|
T30_SUPPORT_COMPRESSION_T6
);
t30_set_phase_b_handler
(
t30
,
phase_b_handler
,
(
void
*
)
(
intptr_t
)
'A'
);
t30_set_phase_b_handler
(
t30
,
phase_b_handler
,
(
void
*
)
(
intptr_t
)
'A'
);
...
...
src/mod/applications/mod_spandsp/mod_spandsp_fax.c
浏览文件 @
f758d53e
...
@@ -876,8 +876,8 @@ static switch_status_t spanfax_init(pvt_t *pvt, transport_mode_t trans_mode)
...
@@ -876,8 +876,8 @@ static switch_status_t spanfax_init(pvt_t *pvt, transport_mode_t trans_mode)
T30_SUPPORT_US_LETTER_LENGTH
|
T30_SUPPORT_US_LEGAL_LENGTH
|
T30_SUPPORT_UNLIMITED_LENGTH
T30_SUPPORT_US_LETTER_LENGTH
|
T30_SUPPORT_US_LEGAL_LENGTH
|
T30_SUPPORT_UNLIMITED_LENGTH
|
T30_SUPPORT_215MM_WIDTH
|
T30_SUPPORT_255MM_WIDTH
|
T30_SUPPORT_303MM_WIDTH
);
|
T30_SUPPORT_215MM_WIDTH
|
T30_SUPPORT_255MM_WIDTH
|
T30_SUPPORT_303MM_WIDTH
);
t30_set_supported_resolutions
(
t30
,
t30_set_supported_resolutions
(
t30
,
T30_SUPPORT_
STANDARD_RESOLUTION
|
T30_SUPPORT_FINE_RESOLUTION
|
T30_SUPPORT_SUPERFINE_RESOLUTION
T30_SUPPORT_
RESOLUTION_R8_STANDARD
|
T30_SUPPORT_RESOLUTION_R8_FINE
|
T30_SUPPORT_RESOLUTION_R8_SUPERFINE
|
T30_SUPPORT_R
8_RESOLUTION
|
T30_SUPPORT_R16_RESOLUTION
);
|
T30_SUPPORT_R
ESOLUTION_R16_SUPERFINE
);
if
(
pvt
->
disable_v17
)
{
if
(
pvt
->
disable_v17
)
{
t30_set_supported_modems
(
t30
,
T30_SUPPORT_V29
|
T30_SUPPORT_V27TER
);
t30_set_supported_modems
(
t30
,
T30_SUPPORT_V29
|
T30_SUPPORT_V27TER
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论