Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
c1e51752
提交
c1e51752
authored
7月 23, 2013
作者:
Steve Underwood
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Tweaks to spandsp
上级
abcf4ac7
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
1014 行增加
和
468 行删除
+1014
-468
t30.c
libs/spandsp/src/t30.c
+61
-54
t4_rx.c
libs/spandsp/src/t4_rx.c
+18
-6
t4_tx.c
libs/spandsp/src/t4_tx.c
+127
-57
v18_tests.c
libs/spandsp/tests/v18_tests.c
+808
-351
没有找到文件。
libs/spandsp/src/t30.c
浏览文件 @
c1e51752
...
...
@@ -435,7 +435,6 @@ static void decode_20digit_msg(t30_state_t *s, char *msg, const uint8_t *pkt, in
static
void
decode_url_msg
(
t30_state_t
*
s
,
char
*
msg
,
const
uint8_t
*
pkt
,
int
len
);
static
int
decode_nsf_nss_nsc
(
t30_state_t
*
s
,
uint8_t
*
msg
[],
const
uint8_t
*
pkt
,
int
len
);
static
void
set_min_scan_time
(
t30_state_t
*
s
);
static
int
send_cfr_sequence
(
t30_state_t
*
s
,
int
start
);
static
void
timer_t2_start
(
t30_state_t
*
s
);
static
void
timer_t2a_start
(
t30_state_t
*
s
);
static
void
timer_t2b_start
(
t30_state_t
*
s
);
...
...
@@ -1217,24 +1216,6 @@ int t30_build_dis_or_dtc(t30_state_t *s)
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T85_L0_CAPABLE
);
}
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_COLOUR
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_FULL_COLOUR_CAPABLE
);
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_T42_T81
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T81_CAPABLE
);
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_T43
))
{
/* Note 25 of table 2/T.30 */
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T43_CAPABLE
);
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T81_CAPABLE
);
}
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_T45
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T45_CAPABLE
);
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_SYCC_T81
))
{
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T81_CAPABLE
);
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_SYCC_T81_CAPABLE
);
}
//if ((s->supported_compressions & T4_SUPPORT_COMPRESSION_T88))
//{
// set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T88_CAPABILITY_1);
...
...
@@ -1242,14 +1223,37 @@ int t30_build_dis_or_dtc(t30_state_t *s)
// set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_T88_CAPABILITY_3);
//}
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_12BIT
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_12BIT_CAPABLE
);
//if ((s->supported_compressions & (T4_SUPPORT_COMPRESSION_COLOUR | T4_SUPPORT_COMPRESSION_GRAYSCALE)))
{
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_COLOUR
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_FULL_COLOUR_CAPABLE
);
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_T42_T81
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T81_CAPABLE
);
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_T43
))
{
/* Note 25 of table 2/T.30 */
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T81_CAPABLE
);
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T43_CAPABLE
);
/* No plane interleave */
}
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_T45
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T45_CAPABLE
);
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_SYCC_T81
))
{
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_T81_CAPABLE
);
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_SYCC_T81_CAPABLE
);
}
if
((
s
->
supported_compressions
&
T4_SUPPORT_COMPRESSION_12BIT
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_12BIT_CAPABLE
);
//if ((s->supported_compressions & T4_SUPPORT_COMPRESSION_NO_SUBSAMPLING))
// set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_NO_SUBSAMPLING);
//if ((s->supported_compressions & T4_SUPPORT_COMPRESSION_NO_SUBSAMPLING))
// set_ctrl_bit(s->local_dis_dtc_frame, T30_DIS_BIT_NO_SUBSAMPLING);
/* No custom illuminant */
/* No custom gamut range */
/* No custom illuminant */
/* No custom gamut range */
}
}
if
((
s
->
supported_t30_features
&
T30_SUPPORT_FIELD_NOT_VALID
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_FNV_CAPABLE
);
...
...
@@ -1257,12 +1261,6 @@ int t30_build_dis_or_dtc(t30_state_t *s)
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_MULTIPLE_SELECTIVE_POLLING_CAPABLE
);
if
((
s
->
supported_t30_features
&
T30_SUPPORT_POLLED_SUB_ADDRESSING
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_POLLED_SUBADDRESSING_CAPABLE
);
/* No plane interleave */
/* No G.726 */
/* No extended voice coding */
/* Superfine minimum scan line time pattern follows fine */
if
((
s
->
supported_t30_features
&
T30_SUPPORT_SELECTIVE_POLLING
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_SELECTIVE_POLLING_CAPABLE
);
if
((
s
->
supported_t30_features
&
T30_SUPPORT_SUB_ADDRESSING
))
...
...
@@ -1270,10 +1268,16 @@ int t30_build_dis_or_dtc(t30_state_t *s)
if
((
s
->
supported_t30_features
&
T30_SUPPORT_IDENTIFICATION
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_PASSWORD
);
/* No G.726 */
/* No extended voice coding */
/* Superfine minimum scan line time pattern follows fine */
/* Ready to transmit a data file (polling) */
if
(
s
->
tx_file
[
0
])
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_READY_TO_TRANSMIT_DATA_FILE
);
/* No simple phase C BFT negotiations */
/* No extended BFT negotiations */
/* No Binary file transfer (BFT) */
/* No Document transfer mode (DTM) */
/* No Electronic data interchange (EDI) */
...
...
@@ -1295,11 +1299,9 @@ int t30_build_dis_or_dtc(t30_state_t *s)
/* No HFX40-I hashing */
/* No alternative hashing system number 2 */
/* No alternative hashing system number 3 */
/* No T.44 (mixed raster content) */
/* No T.44 (mixed raster content) */
/* No page length maximum strip size for T.44 (mixed raster content) */
/* No simple phase C BFT negotiations */
/* No extended BFT negotiations */
if
((
s
->
supported_t30_features
&
T30_SUPPORT_INTERNET_SELECTIVE_POLLING_ADDRESS
))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_INTERNET_SELECTIVE_POLLING_ADDRESS
);
...
...
@@ -1353,9 +1355,9 @@ int t30_build_dis_or_dtc(t30_state_t *s)
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_COLOUR_GRAY_100_100_CAPABLE
);
if
((
s
->
supported_bilevel_resolutions
&
(
T4_SUPPORT_RESOLUTION_R8_STANDARD
|
T4_SUPPORT_RESOLUTION_R8_FINE
|
T4_SUPPORT_RESOLUTION_R8_SUPERFINE
|
T4_SUPPORT_RESOLUTION_R16_SUPERFINE
)))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_INCH_RESOLUTION_PREFERRED
);
if
((
s
->
supported_bilevel_resolutions
&
(
T4_SUPPORT_RESOLUTION_200_100
|
T4_SUPPORT_RESOLUTION_200_200
|
T4_SUPPORT_RESOLUTION_200_400
|
T4_SUPPORT_RESOLUTION_300_300
|
T4_SUPPORT_RESOLUTION_300_600
|
T4_SUPPORT_RESOLUTION_400_400
|
T4_SUPPORT_RESOLUTION_400_800
|
T4_SUPPORT_RESOLUTION_600_600
|
T4_SUPPORT_RESOLUTION_600_1200
|
T4_SUPPORT_RESOLUTION_1200_1200
)))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_METRIC_RESOLUTION_PREFERRED
);
if
((
s
->
supported_bilevel_resolutions
&
(
T4_SUPPORT_RESOLUTION_200_100
|
T4_SUPPORT_RESOLUTION_200_200
|
T4_SUPPORT_RESOLUTION_200_400
|
T4_SUPPORT_RESOLUTION_300_300
|
T4_SUPPORT_RESOLUTION_300_600
|
T4_SUPPORT_RESOLUTION_400_400
|
T4_SUPPORT_RESOLUTION_400_800
|
T4_SUPPORT_RESOLUTION_600_600
|
T4_SUPPORT_RESOLUTION_600_1200
|
T4_SUPPORT_RESOLUTION_1200_1200
)))
set_ctrl_bit
(
s
->
local_dis_dtc_frame
,
T30_DIS_BIT_INCH_RESOLUTION_PREFERRED
);
/* No double sided printing (alternate mode) */
/* No double sided printing (continuous mode) */
...
...
@@ -1426,11 +1428,11 @@ static int build_dcs(t30_state_t *s)
int
image_type
;
/* Reacquire page information, in case the image was resized, flattened, etc. */
s
->
x_resolution
=
t4_tx_get_
x_resolution
(
&
s
->
t4
.
tx
);
s
->
y_resolution
=
t4_tx_get_y
_resolution
(
&
s
->
t4
.
tx
);
s
->
current_page_resolution
=
t4_tx_get
_resolution
(
&
s
->
t4
.
tx
);
s
->
image_width
=
t4_tx_get_image_width
(
&
s
->
t4
.
tx
);
image_type
=
t4_tx_get_image_type
(
&
s
->
t4
.
tx
);
s
->
current_page_resolution
=
t4_tx_get_t
x_resolution
(
&
s
->
t4
.
tx
);
s
->
x_resolution
=
t4_tx_get_tx_x
_resolution
(
&
s
->
t4
.
tx
);
s
->
y_resolution
=
t4_tx_get_tx_y
_resolution
(
&
s
->
t4
.
tx
);
s
->
image_width
=
t4_tx_get_
tx_
image_width
(
&
s
->
t4
.
tx
);
image_type
=
t4_tx_get_
tx_
image_type
(
&
s
->
t4
.
tx
);
/* Make a DCS frame based on local issues and the latest received DIS/DTC frame.
Negotiate the result based on what both parties can do. */
...
...
@@ -2399,11 +2401,9 @@ static int step_fallback_entry(t30_state_t *s)
}
if
(
fallback_sequence
[
s
->
current_fallback
].
which
==
0
)
return
-
1
;
/* TODO: This only sets the minimum row time for future pages. It doesn't fix up the
current page, though it is benign - fallback will only result in an excessive
minimum. */
/* We need to update the minimum scan time, in case we are in non-ECM mode. */
set_min_scan_time
(
s
);
/*
W
e need to rebuild the DCS message we will send. */
/*
Now w
e need to rebuild the DCS message we will send. */
build_dcs
(
s
);
return
s
->
current_fallback
;
}
...
...
@@ -2669,16 +2669,18 @@ static void set_min_scan_time(t30_state_t *s)
}
span_log
(
&
s
->
logging
,
SPAN_LOG_FLOW
,
"Remote FAX does not support fine resolution. Squashing image.
\n
"
);
/* Fall through */
default:
case
T4_Y_RESOLUTION_STANDARD
:
case
T4_Y_RESOLUTION_100
:
s
->
min_scan_time_code
=
translate_min_scan_time
[
0
][
min_bits_field
];
break
;
default:
s
->
min_scan_time_code
=
T30_MIN_SCAN_0MS
;
break
;
}
if
(
!
s
->
error_correcting_mode
&&
(
s
->
iaf
&
T30_IAF_MODE_NO_FILL_BITS
))
if
((
s
->
iaf
&
T30_IAF_MODE_NO_FILL_BITS
))
min_row_bits
=
0
;
else
min_row_bits
=
fallback_sequence
[
s
->
current_fallback
].
bit_rate
*
min_scan_times
[
s
->
min_scan_time_code
]
/
1000
;
min_row_bits
=
(
fallback_sequence
[
s
->
current_fallback
].
bit_rate
*
min_scan_times
[
s
->
min_scan_time_code
])
/
1000
;
span_log
(
&
s
->
logging
,
SPAN_LOG_FLOW
,
"Minimum bits per row will be %d
\n
"
,
min_row_bits
);
t4_tx_set_min_bits_per_row
(
&
s
->
t4
.
tx
,
min_row_bits
);
}
...
...
@@ -2714,10 +2716,11 @@ static int start_sending_document(t30_state_t *s)
return
-
1
;
}
s
->
x_resolution
=
t4_tx_get_x_resolution
(
&
s
->
t4
.
tx
);
s
->
y_resolution
=
t4_tx_get_y_resolution
(
&
s
->
t4
.
tx
);
s
->
image_width
=
t4_tx_get_image_width
(
&
s
->
t4
.
tx
);
/* The minimum scan time to be used can't be evaluated until we know the Y resolution. */
s
->
x_resolution
=
t4_tx_get_tx_x_resolution
(
&
s
->
t4
.
tx
);
s
->
y_resolution
=
t4_tx_get_tx_y_resolution
(
&
s
->
t4
.
tx
);
s
->
image_width
=
t4_tx_get_tx_image_width
(
&
s
->
t4
.
tx
);
/* The minimum scan time to be used can't be evaluated until we know the Y resolution, and
must be evaluated before the minimum scan row bits can be evaluated. */
set_min_scan_time
(
s
);
if
(
s
->
error_correcting_mode
)
...
...
@@ -6483,7 +6486,8 @@ SPAN_DECLARE(void) t30_front_end_status(void *user_data, int status)
{
/* Send the end of page or partial page message */
set_phase
(
s
,
T30_PHASE_D_TX
);
s
->
next_tx_step
=
check_next_tx_step
(
s
);
if
(
s
->
ecm_at_page_end
)
s
->
next_tx_step
=
check_next_tx_step
(
s
);
if
(
send_pps_frame
(
s
)
==
T30_NULL
)
set_state
(
s
,
T30_STATE_IV_PPS_NULL
);
else
...
...
@@ -6808,7 +6812,10 @@ SPAN_DECLARE(t30_state_t *) t30_init(t30_state_t *s,
s
->
supported_compressions
=
T4_SUPPORT_COMPRESSION_T4_1D
|
T4_SUPPORT_COMPRESSION_T4_2D
;
s
->
supported_bilevel_resolutions
=
T4_SUPPORT_RESOLUTION_R8_STANDARD
|
T4_SUPPORT_RESOLUTION_R8_FINE
|
T4_SUPPORT_RESOLUTION_R8_SUPERFINE
;
|
T4_SUPPORT_RESOLUTION_R8_SUPERFINE
|
T4_SUPPORT_RESOLUTION_200_100
|
T4_SUPPORT_RESOLUTION_200_200
|
T4_SUPPORT_RESOLUTION_200_400
;
s
->
supported_image_sizes
=
T4_SUPPORT_WIDTH_215MM
|
T4_SUPPORT_LENGTH_US_LETTER
|
T4_SUPPORT_LENGTH_US_LEGAL
...
...
libs/spandsp/src/t4_rx.c
浏览文件 @
c1e51752
...
...
@@ -371,6 +371,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
break
;
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
s
->
metadata
.
image_length
=
t88_decode_get_image_length
(
&
s
->
decoder
.
t88
);
break
;
#endif
case
T4_COMPRESSION_T42_T81
:
...
...
@@ -383,6 +384,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
s
->
metadata
.
image_length
=
t45_decode_get_image_length
(
&
s
->
decoder
.
t45
);
break
;
#endif
}
...
...
@@ -884,7 +886,7 @@ SPAN_DECLARE(int) t4_rx_set_row_write_handler(t4_rx_state_t *s, t4_row_write_han
return
t85_decode_set_row_write_handler
(
&
s
->
decoder
.
t85
,
handler
,
user_data
);
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
break
;
return
t88_decode_set_row_write_handler
(
&
s
->
decoder
.
t88
,
handler
,
user_data
)
;
#endif
case
T4_COMPRESSION_T42_T81
:
return
t42_decode_set_row_write_handler
(
&
s
->
decoder
.
t42
,
handler
,
user_data
);
...
...
@@ -894,7 +896,7 @@ SPAN_DECLARE(int) t4_rx_set_row_write_handler(t4_rx_state_t *s, t4_row_write_han
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
break
;
return
t45_decode_set_row_write_handler
(
&
s
->
decoder
.
t45
,
handler
,
user_data
)
;
#endif
}
return
-
1
;
...
...
@@ -942,7 +944,7 @@ SPAN_DECLARE(void) t4_rx_get_transfer_statistics(t4_rx_state_t *s, t4_stats_t *t
break
;
#endif
case
T4_COMPRESSION_T42_T81
:
t
->
type
=
0
;
t
->
type
=
T4_IMAGE_TYPE_COLOUR_8BIT
;
//T4_IMAGE_TYPE_GRAY_8BIT
;
t
->
width
=
t42_decode_get_image_width
(
&
s
->
decoder
.
t42
);
t
->
length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
t
->
image_type
=
t
->
type
;
...
...
@@ -952,7 +954,7 @@ SPAN_DECLARE(void) t4_rx_get_transfer_statistics(t4_rx_state_t *s, t4_stats_t *t
break
;
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
t
->
type
=
0
;
t
->
type
=
T4_IMAGE_TYPE_COLOUR_8BIT
;
t
->
width
=
t43_decode_get_image_width
(
&
s
->
decoder
.
t43
);
t
->
length
=
t43_decode_get_image_length
(
&
s
->
decoder
.
t43
);
t
->
image_type
=
t
->
type
;
...
...
@@ -986,6 +988,7 @@ SPAN_DECLARE(int) t4_rx_start_page(t4_rx_state_t *s)
break
;
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
t88_decode_restart
(
&
s
->
decoder
.
t88
);
break
;
#endif
case
T4_COMPRESSION_T42_T81
:
...
...
@@ -998,6 +1001,7 @@ SPAN_DECLARE(int) t4_rx_start_page(t4_rx_state_t *s)
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
t45_decode_restart
(
&
s
->
decoder
.
t45
);
break
;
#endif
}
...
...
@@ -1052,11 +1056,17 @@ SPAN_DECLARE(int) t4_rx_end_page(t4_rx_state_t *s)
break
;
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
t88_decode_put
(
&
s
->
decoder
.
t88
,
NULL
,
0
);
length
=
t88_decode_get_image_length
(
&
s
->
decoder
.
t88
);
break
;
#endif
case
T4_COMPRESSION_T42_T81
:
t42_decode_put
(
&
s
->
decoder
.
t42
,
NULL
,
0
);
length
=
t42_decode_get_image_length
(
&
s
->
decoder
.
t42
);
if
(
s
->
decoder
.
t42
.
samples_per_pixel
==
3
)
select_tiff_compression
(
s
,
T4_IMAGE_TYPE_COLOUR_8BIT
);
else
select_tiff_compression
(
s
,
T4_IMAGE_TYPE_GRAY_8BIT
);
break
;
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
...
...
@@ -1066,6 +1076,8 @@ SPAN_DECLARE(int) t4_rx_end_page(t4_rx_state_t *s)
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
t45_decode_put
(
&
s
->
decoder
.
t45
,
NULL
,
0
);
length
=
t45_decode_get_image_length
(
&
s
->
decoder
.
t45
);
break
;
#endif
}
...
...
@@ -1156,7 +1168,7 @@ SPAN_DECLARE(int) t4_rx_release(t4_rx_state_t *s)
return
t85_decode_release
(
&
s
->
decoder
.
t85
);
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
break
;
return
t88_decode_release
(
&
s
->
decoder
.
t88
)
;
#endif
case
T4_COMPRESSION_T42_T81
:
return
t42_decode_release
(
&
s
->
decoder
.
t42
);
...
...
@@ -1166,7 +1178,7 @@ SPAN_DECLARE(int) t4_rx_release(t4_rx_state_t *s)
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
break
;
return
t45_decode_release
(
&
s
->
decoder
.
t45
)
;
#endif
}
return
-
1
;
...
...
libs/spandsp/src/t4_tx.c
浏览文件 @
c1e51752
...
...
@@ -485,7 +485,7 @@ static int test_tiff_directory_info(t4_tx_state_t *s)
parm32
=
0
;
TIFFGetField
(
t
->
tiff_file
,
TIFFTAG_IMAGEWIDTH
,
&
parm32
);
if
(
s
->
metadata
.
image_width
!=
(
int
)
parm32
)
if
(
s
->
tiff
.
image_width
!=
(
int
)
parm32
)
return
1
;
x_resolution
=
0
.
0
f
;
TIFFGetField
(
t
->
tiff_file
,
TIFFTAG_XRESOLUTION
,
&
x_resolution
);
...
...
@@ -541,16 +541,16 @@ static int tiff_row_read_handler(void *user_data, uint8_t buf[], size_t len)
int
j
;
s
=
(
t4_tx_state_t
*
)
user_data
;
if
(
s
->
tiff
.
row
>=
s
->
metadata
.
image_length
)
if
(
s
->
tiff
.
row
>=
s
->
tiff
.
image_length
)
return
0
;
memcpy
(
buf
,
&
s
->
tiff
.
image_buffer
[
s
->
tiff
.
row
*
len
],
len
);
s
->
tiff
.
row
++
;
/* If this is a bi-level image which has more vertical resolution than the
far end will accept, we need to squash it down to size. */
for
(
i
=
1
;
i
<
s
->
row_squashing_ratio
&&
s
->
tiff
.
row
<
s
->
metadata
.
image_length
;
i
++
)
for
(
i
=
1
;
i
<
s
->
row_squashing_ratio
&&
s
->
tiff
.
row
<
s
->
tiff
.
image_length
;
i
++
)
{
for
(
j
=
0
;
j
<
s
->
metadata
.
image_width
/
8
;
j
++
)
for
(
j
=
0
;
j
<
s
->
tiff
.
image_width
/
8
;
j
++
)
buf
[
j
]
|=
s
->
tiff
.
image_buffer
[
s
->
tiff
.
row
*
len
+
j
];
s
->
tiff
.
row
++
;
}
...
...
@@ -604,7 +604,6 @@ static int read_tiff_t85_image(t4_tx_state_t *s)
{
int
biggest
;
int
num_strips
;
int
total_len
;
int
len
;
int
i
;
int
result
;
...
...
@@ -615,8 +614,8 @@ static int read_tiff_t85_image(t4_tx_state_t *s)
/* Size up and allocate the buffer for the raw data */
num_strips
=
TIFFNumberOfStrips
(
s
->
tiff
.
tiff_file
);
biggest
=
TIFFRawStripSize
(
s
->
tiff
.
tiff_file
,
0
)
;
for
(
i
=
1
;
i
<
num_strips
;
i
++
)
biggest
=
0
;
for
(
i
=
0
;
i
<
num_strips
;
i
++
)
{
len
=
TIFFRawStripSize
(
s
->
tiff
.
tiff_file
,
i
);
if
(
len
>
biggest
)
...
...
@@ -625,11 +624,14 @@ static int read_tiff_t85_image(t4_tx_state_t *s)
if
((
raw_data
=
malloc
(
biggest
))
==
NULL
)
return
-
1
;
s
->
tiff
.
image_size
=
s
->
metadata
.
image_length
*
((
s
->
metadata
.
image_width
+
7
)
/
8
);
s
->
tiff
.
image_size
=
s
->
tiff
.
image_length
*
((
s
->
tiff
.
image_width
+
7
)
/
8
);
if
(
s
->
tiff
.
image_size
>=
s
->
tiff
.
image_buffer_size
)
{
if
((
t
=
realloc
(
s
->
tiff
.
image_buffer
,
s
->
tiff
.
image_size
))
==
NULL
)
{
free
(
raw_data
);
return
-
1
;
}
s
->
tiff
.
image_buffer_size
=
s
->
tiff
.
image_size
;
s
->
tiff
.
image_buffer
=
t
;
}
...
...
@@ -640,14 +642,14 @@ static int read_tiff_t85_image(t4_tx_state_t *s)
t85_decode_init
(
&
t85
,
packing_row_write_handler
,
&
pack
);
t85_decode_set_comment_handler
(
&
t85
,
1000
,
embedded_comment_handler
,
s
);
total_len
=
0
;
result
=
-
1
;
for
(
i
=
0
;
i
<
num_strips
;
i
++
,
total_len
+=
len
)
for
(
i
=
0
;
i
<
num_strips
;
i
++
)
{
len
=
TIFFRawStripSize
(
s
->
tiff
.
tiff_file
,
i
);
if
((
len
=
TIFFReadRawStrip
(
s
->
tiff
.
tiff_file
,
i
,
raw_data
,
len
))
<
0
)
{
span_log
(
&
s
->
logging
,
SPAN_LOG_WARNING
,
"%s: ReadRaw error.
\n
"
,
s
->
tiff
.
file
);
span_log
(
&
s
->
logging
,
SPAN_LOG_WARNING
,
"%s: TIFFReadRawStrip error.
\n
"
,
s
->
tiff
.
file
);
free
(
raw_data
);
return
-
1
;
}
result
=
t85_decode_put
(
&
t85
,
raw_data
,
len
);
...
...
@@ -658,7 +660,7 @@ static int read_tiff_t85_image(t4_tx_state_t *s)
result
=
t85_decode_put
(
&
t85
,
NULL
,
0
);
len
=
t85_decode_get_compressed_image_size
(
&
t85
);
span_log
(
&
s
->
logging
,
SPAN_LOG_WARNING
,
"Compressed image is %d bytes, %d rows
\n
"
,
len
/
8
,
s
->
metadata
.
image_length
);
span_log
(
&
s
->
logging
,
SPAN_LOG_WARNING
,
"Compressed image is %d bytes, %d rows
\n
"
,
len
/
8
,
s
->
tiff
.
image_length
);
t85_decode_release
(
&
t85
);
free
(
raw_data
);
return
0
;
...
...
@@ -717,20 +719,26 @@ static int read_tiff_t43_image(t4_tx_state_t *s, uint8_t **buf)
#endif
#if 0
static int read_tiff_t42_t81_image(t4_tx_state_t *s
, uint8_t **buf
)
static int read_tiff_t42_t81_image(t4_tx_state_t *s)
{
int total_len;
int len;
int i;
int num_strips;
int total_image_len;
int image_size
;
uint8_t *t
;
uint8_t *raw_data;
uint8_t *jpeg_table;
uint32_t jpeg_table_len;
uint32_t w;
uint32_t h;
tsize_t off;
packer_t pack;
uint16_t bits_per_sample;
uint16_t samples_per_pixel;
t42_decode_state_t t42;
bits_per_sample = 1;
TIFFGetField(s->tiff.tiff_file, TIFFTAG_BITSPERSAMPLE, &bits_per_sample);
samples_per_pixel = 1;
TIFFGetField(s->tiff.tiff_file, TIFFTAG_SAMPLESPERPIXEL, &samples_per_pixel);
num_strips = TIFFNumberOfStrips(s->tiff.tiff_file);
total_image_len = 0;
...
...
@@ -753,7 +761,8 @@ static int read_tiff_t42_t81_image(t4_tx_state_t *s, uint8_t **buf)
{
if ((len = TIFFReadRawStrip(s->tiff.tiff_file, i, &raw_data[total_len], total_image_len - total_len)) < 0)
{
span_log(&s->logging, SPAN_LOG_FLOW, "TIFF read error.\n");
span_log(&s->logging, SPAN_LOG_WARNING, "%s: TIFFReadRawStrip error.\n", s->tiff.file);
free(raw_data);
return -1;
}
}
...
...
@@ -763,18 +772,30 @@ static int read_tiff_t42_t81_image(t4_tx_state_t *s, uint8_t **buf)
if (total_len != total_image_len)
span_log(&s->logging, SPAN_LOG_FLOW, "Size mismatch %d %d\n", (int) total_len, (int) total_image_len);
image_size = 3*s->metadata.image_length*s->metadata.image_width;
if ((*buf = malloc(image_size)) == NULL)
return -1;
off = 0;
if (!t42_itulab_to_srgb(&s->logging, &s->lab_params, *buf, &off, raw_data, total_image_len, &w, &h))
s->tiff.image_size = samples_per_pixel*s->tiff.image_width*s->tiff.image_length;
if (s->tiff.image_size >= s->tiff.image_buffer_size)
{
span_log(&s->logging, SPAN_LOG_FLOW, "Failed to convert from ITULAB.\n");
return -1;
if ((t = realloc(s->tiff.image_buffer, s->tiff.image_size)) == NULL)
{
free(raw_data);
return -1;
}
s->tiff.image_buffer_size = s->tiff.image_size;
s->tiff.image_buffer = t;
}
t42_decode_init(&t42, packing_row_write_handler, &pack);
pack.buf = s->tiff.image_buffer;
pack.ptr = 0;
pack.row = 0;
t42_decode_put(&t42, raw_data, total_image_len);
t42_decode_put(&t42, NULL, 0);
t42_decode_release(&t42);
free(raw_data);
return image_size;
return
s->tiff.
image_size;
}
/*- End of function --------------------------------------------------------*/
#endif
...
...
@@ -789,7 +810,7 @@ static int read_tiff_decompressed_image(t4_tx_state_t *s)
/* Decode the whole image into a buffer */
/* Let libtiff handle the decompression */
s
->
tiff
.
image_size
=
s
->
metadata
.
image_length
*
TIFFScanlineSize
(
s
->
tiff
.
tiff_file
);
s
->
tiff
.
image_size
=
s
->
tiff
.
image_length
*
TIFFScanlineSize
(
s
->
tiff
.
tiff_file
);
if
(
s
->
tiff
.
image_size
>=
s
->
tiff
.
image_buffer_size
)
{
if
((
t
=
realloc
(
s
->
tiff
.
image_buffer
,
s
->
tiff
.
image_size
))
==
NULL
)
...
...
@@ -798,14 +819,13 @@ static int read_tiff_decompressed_image(t4_tx_state_t *s)
s
->
tiff
.
image_buffer
=
t
;
}
/* Allow for the image being stored in multiple strips, although it is rare to find
a stripped image in a T.4 or T.6 encoded file. */
/* Allow for the image being stored in multiple strips. */
num_strips
=
TIFFNumberOfStrips
(
s
->
tiff
.
tiff_file
);
for
(
i
=
0
,
total_len
=
0
;
i
<
num_strips
;
i
++
,
total_len
+=
len
)
{
if
((
len
=
TIFFReadEncodedStrip
(
s
->
tiff
.
tiff_file
,
i
,
&
s
->
tiff
.
image_buffer
[
total_len
],
s
->
tiff
.
image_size
-
total_len
))
<
0
)
{
span_log
(
&
s
->
logging
,
SPAN_LOG_WARNING
,
"%s:
Read
error.
\n
"
,
s
->
tiff
.
file
);
span_log
(
&
s
->
logging
,
SPAN_LOG_WARNING
,
"%s:
TIFFReadEncodedStrip
error.
\n
"
,
s
->
tiff
.
file
);
return
-
1
;
}
}
...
...
@@ -935,7 +955,7 @@ static int set_row_read_handler(t4_tx_state_t *s, t4_row_read_handler_t handler,
return
t85_encode_set_row_read_handler
(
&
s
->
encoder
.
t85
,
handler
,
user_data
);
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
break
;
return
t88_encode_set_row_read_handler
(
&
s
->
encoder
.
t88
,
handler
,
user_data
)
;
#endif
case
T4_COMPRESSION_T42_T81
:
case
T4_COMPRESSION_SYCC_T81
:
...
...
@@ -946,7 +966,7 @@ static int set_row_read_handler(t4_tx_state_t *s, t4_row_read_handler_t handler,
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
break
;
return
t45_encode_set_row_read_handler
(
&
s
->
encoder
.
t45
,
handler
,
user_data
)
;
#endif
}
return
-
1
;
...
...
@@ -997,7 +1017,8 @@ static int make_header(t4_tx_state_t *s)
static
int
header_row_read_handler
(
void
*
user_data
,
uint8_t
buf
[],
size_t
len
)
{
int
repeats
;
int
x_repeats
;
int
y_repeats
;
int
pattern
;
int
pos
;
int
row
;
...
...
@@ -1008,28 +1029,30 @@ static int header_row_read_handler(void *user_data, uint8_t buf[], size_t len)
switch
(
s
->
metadata
.
y_resolution
)
{
case
T4_Y_RESOLUTION_1200
:
repeats
=
12
;
y_
repeats
=
12
;
break
;
case
T4_Y_RESOLUTION_800
:
repeats
=
8
;
y_
repeats
=
8
;
break
;
case
T4_Y_RESOLUTION_600
:
repeats
=
6
;
y_
repeats
=
6
;
break
;
case
T4_Y_RESOLUTION_SUPERFINE
:
repeats
=
4
;
case
T4_Y_RESOLUTION_400
:
y_repeats
=
4
;
break
;
case
T4_Y_RESOLUTION_300
:
repeats
=
3
;
y_
repeats
=
3
;
break
;
case
T4_Y_RESOLUTION_FINE
:
repeats
=
2
;
case
T4_Y_RESOLUTION_200
:
y_repeats
=
2
;
break
;
default
:
repeats
=
1
;
y_
repeats
=
1
;
break
;
}
repeats
/=
s
->
row_squashing_ratio
;
y_
repeats
/=
s
->
row_squashing_ratio
;
if
(
s
->
header_overlays_image
)
{
/* Read and dump a row of the real image, allowing for the possibility
...
...
@@ -1040,7 +1063,7 @@ static int header_row_read_handler(void *user_data, uint8_t buf[], size_t len)
return
len
;
}
}
row
=
s
->
header_row
/
repeats
;
row
=
s
->
header_row
/
y_
repeats
;
pos
=
0
;
for
(
t
=
s
->
header_text
;
*
t
&&
pos
<=
len
-
2
;
t
++
)
{
...
...
@@ -1051,7 +1074,7 @@ static int header_row_read_handler(void *user_data, uint8_t buf[], size_t len)
while
(
pos
<
len
)
buf
[
pos
++
]
=
0
;
s
->
header_row
++
;
if
(
s
->
header_row
>=
16
*
repeats
)
if
(
s
->
header_row
>=
16
*
y_
repeats
)
{
/* End of header. Change to normal image row data. */
set_row_read_handler
(
s
,
s
->
row_handler
,
s
->
row_handler_user_data
);
...
...
@@ -1089,10 +1112,10 @@ SPAN_DECLARE(int) t4_tx_set_row_read_handler(t4_tx_state_t *s, t4_row_read_handl
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
t4_tx_set_tx_encoding
(
t4_tx_state_t
*
s
,
int
encoding
)
SPAN_DECLARE
(
int
)
t4_tx_set_tx_encoding
(
t4_tx_state_t
*
s
,
int
compression
)
{
{
switch
(
encoding
)
switch
(
compression
)
{
case
T4_COMPRESSION_T4_1D
:
case
T4_COMPRESSION_T4_2D
:
...
...
@@ -1104,12 +1127,12 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
case
T4_COMPRESSION_T6
:
break
;
default
:
t4_t6_encode_init
(
&
s
->
encoder
.
t4_t6
,
encoding
,
s
->
metadata
.
image_width
,
s
->
metadata
.
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
t4_t6_encode_init
(
&
s
->
encoder
.
t4_t6
,
compression
,
s
->
metadata
.
image_width
,
s
->
metadata
.
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
t4_t6_encode_set_max_2d_rows_per_1d_row
(
&
s
->
encoder
.
t4_t6
,
-
s
->
metadata
.
y_resolution
);
break
;
}
s
->
metadata
.
compression
=
encoding
;
if
(
t4_t6_encode_set_encoding
(
&
s
->
encoder
.
t4_t6
,
encoding
))
s
->
metadata
.
compression
=
compression
;
if
(
t4_t6_encode_set_encoding
(
&
s
->
encoder
.
t4_t6
,
compression
))
return
-
1
;
return
s
->
metadata
.
compression
;
case
T4_COMPRESSION_T85
:
...
...
@@ -1123,7 +1146,7 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
t85_encode_init
(
&
s
->
encoder
.
t85
,
s
->
metadata
.
image_width
,
s
->
metadata
.
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
break
;
}
s
->
metadata
.
compression
=
encoding
;
s
->
metadata
.
compression
=
compression
;
return
s
->
metadata
.
compression
;
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
...
...
@@ -1132,9 +1155,10 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
case
T4_COMPRESSION_T88
:
break
;
default
:
t88_encode_init
(
&
s
->
encoder
.
t88
,
s
->
metadata
.
image_width
,
s
->
metadata
.
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
break
;
}
s
->
metadata
.
compression
=
encoding
;
s
->
metadata
.
compression
=
compression
;
return
s
->
metadata
.
compression
;
#endif
case
T4_COMPRESSION_T42_T81
:
...
...
@@ -1148,7 +1172,7 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
t42_encode_init
(
&
s
->
encoder
.
t42
,
s
->
metadata
.
image_width
,
s
->
metadata
.
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
break
;
}
s
->
metadata
.
compression
=
encoding
;
s
->
metadata
.
compression
=
compression
;
return
s
->
metadata
.
compression
;
#if defined(SPANDSP_SUPPORT_T43)
case
T4_COMPRESSION_T43
:
...
...
@@ -1160,7 +1184,7 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
t43_encode_init
(
&
s
->
encoder
.
t43
,
s
->
metadata
.
image_width
,
s
->
metadata
.
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
break
;
}
s
->
metadata
.
compression
=
encoding
;
s
->
metadata
.
compression
=
compression
;
return
s
->
metadata
.
compression
;
#endif
#if defined(SPANDSP_SUPPORT_T45)
...
...
@@ -1170,9 +1194,10 @@ SPAN_DECLARE(int) t4_tx_set_tx_encoding(t4_tx_state_t *s, int encoding)
case
T4_COMPRESSION_T45
:
break
;
default
:
t45_encode_init
(
&
s
->
encoder
.
t45
,
s
->
metadata
.
image_width
,
s
->
metadata
.
image_length
,
s
->
row_handler
,
s
->
row_handler_user_data
);
break
;
}
s
->
metadata
.
compression
=
encoding
;
s
->
metadata
.
compression
=
compression
;
return
s
->
metadata
.
compression
;
#endif
}
...
...
@@ -1194,6 +1219,42 @@ SPAN_DECLARE(void) t4_tx_set_min_bits_per_row(t4_tx_state_t *s, int bits)
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
t4_tx_get_tx_compression
(
t4_tx_state_t
*
s
)
{
return
s
->
metadata
.
compression
;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
t4_tx_get_tx_image_type
(
t4_tx_state_t
*
s
)
{
return
s
->
metadata
.
image_type
;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
t4_tx_get_tx_resolution
(
t4_tx_state_t
*
s
)
{
return
s
->
metadata
.
resolution_code
;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
t4_tx_get_tx_x_resolution
(
t4_tx_state_t
*
s
)
{
return
s
->
metadata
.
x_resolution
;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
t4_tx_get_tx_y_resolution
(
t4_tx_state_t
*
s
)
{
return
s
->
metadata
.
y_resolution
;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
int
)
t4_tx_get_tx_image_width
(
t4_tx_state_t
*
s
)
{
return
s
->
metadata
.
image_width
;
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE
(
void
)
t4_tx_set_image_width
(
t4_tx_state_t
*
s
,
int
image_width
)
{
s
->
metadata
.
image_width
=
image_width
;
...
...
@@ -1210,6 +1271,7 @@ SPAN_DECLARE(void) t4_tx_set_image_width(t4_tx_state_t *s, int image_width)
break
;
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
t88_encode_set_image_width
(
&
s
->
encoder
.
t88
,
image_width
);
break
;
#endif
case
T4_COMPRESSION_T42_T81
:
...
...
@@ -1223,6 +1285,7 @@ SPAN_DECLARE(void) t4_tx_set_image_width(t4_tx_state_t *s, int image_width)
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
t45_encode_set_image_width
(
&
s
->
encoder
.
t45
,
image_width
);
break
;
#endif
}
...
...
@@ -1240,6 +1303,7 @@ static void t4_tx_set_image_length(t4_tx_state_t *s, uint32_t image_length)
break
;
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
t88_encode_set_image_length
(
&
s
->
encoder
.
t88
,
image_length
);
break
;
#endif
case
T4_COMPRESSION_T42_T81
:
...
...
@@ -1253,6 +1317,7 @@ static void t4_tx_set_image_length(t4_tx_state_t *s, uint32_t image_length)
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
t45_encode_set_image_length
(
&
s
->
encoder
.
t45
,
image_length
);
break
;
#endif
}
...
...
@@ -1382,6 +1447,9 @@ SPAN_DECLARE(void) t4_tx_get_transfer_statistics(t4_tx_state_t *s, t4_stats_t *t
break
;
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
t
->
width
=
t88_encode_get_image_width
(
&
s
->
encoder
.
t88
);
t
->
length
=
t88_encode_get_image_length
(
&
s
->
encoder
.
t88
);
t
->
line_image_size
=
t88_encode_get_compressed_image_size
(
&
s
->
encoder
.
t88
)
/
8
;
break
;
#endif
case
T4_COMPRESSION_T42_T81
:
...
...
@@ -1401,6 +1469,9 @@ SPAN_DECLARE(void) t4_tx_get_transfer_statistics(t4_tx_state_t *s, t4_stats_t *t
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
t
->
width
=
t45_encode_get_image_width
(
&
s
->
encoder
.
t45
);
t
->
length
=
t45_encode_get_image_length
(
&
s
->
encoder
.
t45
);
t
->
line_image_size
=
t45_encode_get_compressed_image_size
(
&
s
->
encoder
.
t45
)
/
8
;
break
;
#endif
}
...
...
@@ -1471,7 +1542,7 @@ SPAN_DECLARE(int) t4_tx_get(t4_tx_state_t *s, uint8_t buf[], size_t max_len)
return
t85_encode_get
(
&
s
->
encoder
.
t85
,
buf
,
max_len
);
#if defined(SPANDSP_SUPPORT_T88)
case
T4_COMPRESSION_T88
:
break
;
return
t88_encode_get
(
&
s
->
encoder
.
t88
,
buf
,
max_len
)
;
#endif
case
T4_COMPRESSION_T42_T81
:
case
T4_COMPRESSION_SYCC_T81
:
...
...
@@ -1482,7 +1553,7 @@ SPAN_DECLARE(int) t4_tx_get(t4_tx_state_t *s, uint8_t buf[], size_t max_len)
#endif
#if defined(SPANDSP_SUPPORT_T45)
case
T4_COMPRESSION_T45
:
break
;
return
t45_encode_get
(
&
s
->
encoder
.
t45
,
buf
,
max_len
)
;
#endif
}
#endif
...
...
@@ -1548,7 +1619,6 @@ SPAN_DECLARE(int) t4_tx_start_page(t4_tx_state_t *s)
s
->
image_get_handler
=
NULL
;
break
;
}
/* If there is a page header, create that first */
if
(
s
->
metadata
.
image_type
==
T4_IMAGE_TYPE_BILEVEL
&&
s
->
header_info
&&
s
->
header_info
[
0
]
&&
make_header
(
s
)
==
0
)
//if (s->header_info && s->header_info[0] && make_header(s) == 0)
...
...
libs/spandsp/tests/v18_tests.c
浏览文件 @
c1e51752
This source diff could not be displayed because it is too large. You can
view the blob
instead.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论