Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
2caf19e9
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2caf19e9
编写于
5月 10, 2011
作者:
R
Ronald S. Bultje
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
h264pred: fix aliasing violations.
Tested to fix Haiku H264/10bit fate failures, may also fix others.
上级
e1e0ca70
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
93 addition
and
73 deletion
+93
-73
libavcodec/h264pred_template.c
libavcodec/h264pred_template.c
+90
-73
libavcodec/high_bit_depth.h
libavcodec/high_bit_depth.h
+3
-0
未找到文件。
libavcodec/h264pred_template.c
浏览文件 @
2caf19e9
...
...
@@ -31,20 +31,21 @@
static
void
FUNCC
(
pred4x4_vertical
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
const
pixel4
a
=
((
pixel4
*
)(
src
-
stride
))[
0
];
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
a
;
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
a
;
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
a
;
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
a
;
const
pixel4
a
=
AV_RN4PA
(
src
-
stride
);
AV_WN4PA
(
src
+
0
*
stride
,
a
);
AV_WN4PA
(
src
+
1
*
stride
,
a
);
AV_WN4PA
(
src
+
2
*
stride
,
a
);
AV_WN4PA
(
src
+
3
*
stride
,
a
);
}
static
void
FUNCC
(
pred4x4_horizontal
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
0
*
stride
]
);
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
1
*
stride
]
);
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
2
*
stride
]
);
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
3
*
stride
]
);
AV_WN4PA
(
src
+
0
*
stride
,
PIXEL_SPLAT_X4
(
src
[
-
1
+
0
*
stride
])
);
AV_WN4PA
(
src
+
1
*
stride
,
PIXEL_SPLAT_X4
(
src
[
-
1
+
1
*
stride
])
);
AV_WN4PA
(
src
+
2
*
stride
,
PIXEL_SPLAT_X4
(
src
[
-
1
+
2
*
stride
])
);
AV_WN4PA
(
src
+
3
*
stride
,
PIXEL_SPLAT_X4
(
src
[
-
1
+
3
*
stride
])
);
}
static
void
FUNCC
(
pred4x4_dc
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
...
...
@@ -52,60 +53,69 @@ static void FUNCC(pred4x4_dc)(uint8_t *_src, const uint8_t *topright, int _strid
int
stride
=
_stride
/
sizeof
(
pixel
);
const
int
dc
=
(
src
[
-
stride
]
+
src
[
1
-
stride
]
+
src
[
2
-
stride
]
+
src
[
3
-
stride
]
+
src
[
-
1
+
0
*
stride
]
+
src
[
-
1
+
1
*
stride
]
+
src
[
-
1
+
2
*
stride
]
+
src
[
-
1
+
3
*
stride
]
+
4
)
>>
3
;
const
pixel4
a
=
PIXEL_SPLAT_X4
(
dc
);
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
dc
);
AV_WN4PA
(
src
+
0
*
stride
,
a
);
AV_WN4PA
(
src
+
1
*
stride
,
a
);
AV_WN4PA
(
src
+
2
*
stride
,
a
);
AV_WN4PA
(
src
+
3
*
stride
,
a
);
}
static
void
FUNCC
(
pred4x4_left_dc
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
const
int
dc
=
(
src
[
-
1
+
0
*
stride
]
+
src
[
-
1
+
1
*
stride
]
+
src
[
-
1
+
2
*
stride
]
+
src
[
-
1
+
3
*
stride
]
+
2
)
>>
2
;
const
pixel4
a
=
PIXEL_SPLAT_X4
(
dc
);
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
dc
);
AV_WN4PA
(
src
+
0
*
stride
,
a
);
AV_WN4PA
(
src
+
1
*
stride
,
a
);
AV_WN4PA
(
src
+
2
*
stride
,
a
);
AV_WN4PA
(
src
+
3
*
stride
,
a
);
}
static
void
FUNCC
(
pred4x4_top_dc
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
const
int
dc
=
(
src
[
-
stride
]
+
src
[
1
-
stride
]
+
src
[
2
-
stride
]
+
src
[
3
-
stride
]
+
2
)
>>
2
;
const
pixel4
a
=
PIXEL_SPLAT_X4
(
dc
);
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
dc
);
AV_WN4PA
(
src
+
0
*
stride
,
a
);
AV_WN4PA
(
src
+
1
*
stride
,
a
);
AV_WN4PA
(
src
+
2
*
stride
,
a
);
AV_WN4PA
(
src
+
3
*
stride
,
a
);
}
static
void
FUNCC
(
pred4x4_128_dc
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
(
1
<<
(
BIT_DEPTH
-
1
));
const
pixel4
a
=
PIXEL_SPLAT_X4
(
1
<<
(
BIT_DEPTH
-
1
));
AV_WN4PA
(
src
+
0
*
stride
,
a
);
AV_WN4PA
(
src
+
1
*
stride
,
a
);
AV_WN4PA
(
src
+
2
*
stride
,
a
);
AV_WN4PA
(
src
+
3
*
stride
,
a
);
}
static
void
FUNCC
(
pred4x4_127_dc
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
((
1
<<
(
BIT_DEPTH
-
1
))
-
1
);
const
pixel4
a
=
PIXEL_SPLAT_X4
((
1
<<
(
BIT_DEPTH
-
1
))
-
1
);
AV_WN4PA
(
src
+
0
*
stride
,
a
);
AV_WN4PA
(
src
+
1
*
stride
,
a
);
AV_WN4PA
(
src
+
2
*
stride
,
a
);
AV_WN4PA
(
src
+
3
*
stride
,
a
);
}
static
void
FUNCC
(
pred4x4_129_dc
)(
uint8_t
*
_src
,
const
uint8_t
*
topright
,
int
_stride
){
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
((
pixel4
*
)(
src
+
0
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
1
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
2
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
3
*
stride
))[
0
]
=
PIXEL_SPLAT_X4
((
1
<<
(
BIT_DEPTH
-
1
))
+
1
);
const
pixel4
a
=
PIXEL_SPLAT_X4
((
1
<<
(
BIT_DEPTH
-
1
))
+
1
);
AV_WN4PA
(
src
+
0
*
stride
,
a
);
AV_WN4PA
(
src
+
1
*
stride
,
a
);
AV_WN4PA
(
src
+
2
*
stride
,
a
);
AV_WN4PA
(
src
+
3
*
stride
,
a
);
}
...
...
@@ -286,16 +296,16 @@ static void FUNCC(pred16x16_vertical)(uint8_t *_src, int _stride){
int
i
;
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
const
pixel4
a
=
((
pixel4
*
)(
src
-
stride
))[
0
]
;
const
pixel4
b
=
((
pixel4
*
)(
src
-
stride
))[
1
]
;
const
pixel4
c
=
((
pixel4
*
)(
src
-
stride
))[
2
]
;
const
pixel4
d
=
((
pixel4
*
)(
src
-
stride
))[
3
]
;
const
pixel4
a
=
AV_RN4PA
(((
pixel4
*
)(
src
-
stride
))
+
0
)
;
const
pixel4
b
=
AV_RN4PA
(((
pixel4
*
)(
src
-
stride
))
+
1
)
;
const
pixel4
c
=
AV_RN4PA
(((
pixel4
*
)(
src
-
stride
))
+
2
)
;
const
pixel4
d
=
AV_RN4PA
(((
pixel4
*
)(
src
-
stride
))
+
3
)
;
for
(
i
=
0
;
i
<
16
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
a
;
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
b
;
((
pixel4
*
)(
src
+
i
*
stride
))[
2
]
=
c
;
((
pixel4
*
)(
src
+
i
*
stride
))[
3
]
=
d
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
a
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
b
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
2
,
c
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
3
,
d
)
;
}
}
...
...
@@ -305,19 +315,21 @@ static void FUNCC(pred16x16_horizontal)(uint8_t *_src, int stride){
stride
/=
sizeof
(
pixel
);
for
(
i
=
0
;
i
<
16
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
((
pixel4
*
)(
src
+
i
*
stride
))[
2
]
=
((
pixel4
*
)(
src
+
i
*
stride
))[
3
]
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
i
*
stride
]);
const
pixel4
a
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
i
*
stride
]);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
a
);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
a
);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
2
,
a
);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
3
,
a
);
}
}
#define PREDICT_16x16_DC(v)\
for(i=0; i<16; i++){\
AV_WN4P(src+ 0, v);\
AV_WN4P(src+ 4, v);\
AV_WN4P(src+ 8, v);\
AV_WN4P(src+12, v);\
AV_WN4P
A
(src+ 0, v);\
AV_WN4P
A
(src+ 4, v);\
AV_WN4P
A
(src+ 8, v);\
AV_WN4P
A
(src+12, v);\
src += stride;\
}
...
...
@@ -432,12 +444,12 @@ static void FUNCC(pred8x8_vertical)(uint8_t *_src, int _stride){
int
i
;
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
const
pixel4
a
=
((
pixel4
*
)(
src
-
stride
))[
0
]
;
const
pixel4
b
=
((
pixel4
*
)(
src
-
stride
))[
1
]
;
const
pixel4
a
=
AV_RN4PA
(((
pixel4
*
)(
src
-
stride
))
+
0
)
;
const
pixel4
b
=
AV_RN4PA
(((
pixel4
*
)(
src
-
stride
))
+
1
)
;
for
(
i
=
0
;
i
<
8
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
a
;
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
b
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
a
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
b
)
;
}
}
...
...
@@ -447,19 +459,21 @@ static void FUNCC(pred8x8_horizontal)(uint8_t *_src, int stride){
stride
/=
sizeof
(
pixel
);
for
(
i
=
0
;
i
<
8
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
i
*
stride
]);
const
pixel4
a
=
PIXEL_SPLAT_X4
(
src
[
-
1
+
i
*
stride
]);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
a
);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
a
);
}
}
#define PRED8x8_X(n, v)\
static void FUNCC(pred8x8_##n##_dc)(uint8_t *_src, int stride){\
int i;\
const pixel4 a = PIXEL_SPLAT_X4(v);\
pixel *src = (pixel*)_src;\
stride /= sizeof(pixel);\
for(i=0; i<8; i++){\
((pixel4*)(src+i*stride))[0]=
\
((pixel4*)(src+i*stride))[1]= PIXEL_SPLAT_X4(v
);\
AV_WN4PA(((pixel4*)(src+i*stride))+0, a);
\
AV_WN4PA(((pixel4*)(src+i*stride))+1, a
);\
}\
}
...
...
@@ -483,12 +497,12 @@ static void FUNCC(pred8x8_left_dc)(uint8_t *_src, int stride){
dc2splat
=
PIXEL_SPLAT_X4
((
dc2
+
2
)
>>
2
);
for
(
i
=
0
;
i
<
4
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
dc0splat
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
dc0splat
);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
dc0splat
)
;
}
for
(
i
=
4
;
i
<
8
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
dc2splat
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
dc2splat
);
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
dc2splat
)
;
}
}
...
...
@@ -508,12 +522,12 @@ static void FUNCC(pred8x8_top_dc)(uint8_t *_src, int stride){
dc1splat
=
PIXEL_SPLAT_X4
((
dc1
+
2
)
>>
2
);
for
(
i
=
0
;
i
<
4
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
dc0splat
;
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
dc1splat
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
dc0splat
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
dc1splat
)
;
}
for
(
i
=
4
;
i
<
8
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
dc0splat
;
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
dc1splat
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
dc0splat
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
dc1splat
)
;
}
}
...
...
@@ -536,12 +550,12 @@ static void FUNCC(pred8x8_dc)(uint8_t *_src, int stride){
dc3splat
=
PIXEL_SPLAT_X4
((
dc1
+
dc2
+
4
)
>>
3
);
for
(
i
=
0
;
i
<
4
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
dc0splat
;
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
dc1splat
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
dc0splat
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
dc1splat
)
;
}
for
(
i
=
4
;
i
<
8
;
i
++
){
((
pixel4
*
)(
src
+
i
*
stride
))[
0
]
=
dc2splat
;
((
pixel4
*
)(
src
+
i
*
stride
))[
1
]
=
dc3splat
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
0
,
dc2splat
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
i
*
stride
))
+
1
,
dc3splat
)
;
}
}
...
...
@@ -636,8 +650,8 @@ static void FUNCC(pred8x8_plane)(uint8_t *_src, int _stride){
#define PREDICT_8x8_DC(v) \
int y; \
for( y = 0; y < 8; y++ ) { \
((pixel4*)src)[0] =
\
((pixel4*)src)[1] = v
; \
AV_WN4PA(((pixel4*)src)+0, v);
\
AV_WN4PA(((pixel4*)src)+1, v)
; \
src += stride; \
}
...
...
@@ -693,6 +707,7 @@ static void FUNCC(pred8x8l_vertical)(uint8_t *_src, int has_topleft, int has_top
int
y
;
pixel
*
src
=
(
pixel
*
)
_src
;
int
stride
=
_stride
/
sizeof
(
pixel
);
pixel4
a
,
b
;
PREDICT_8x8_LOAD_TOP
;
src
[
0
]
=
t0
;
...
...
@@ -703,9 +718,11 @@ static void FUNCC(pred8x8l_vertical)(uint8_t *_src, int has_topleft, int has_top
src
[
5
]
=
t5
;
src
[
6
]
=
t6
;
src
[
7
]
=
t7
;
a
=
AV_RN4PA
(((
pixel4
*
)
src
)
+
0
);
b
=
AV_RN4PA
(((
pixel4
*
)
src
)
+
1
);
for
(
y
=
1
;
y
<
8
;
y
++
)
{
((
pixel4
*
)(
src
+
y
*
stride
))[
0
]
=
((
pixel4
*
)
src
)[
0
]
;
((
pixel4
*
)(
src
+
y
*
stride
))[
1
]
=
((
pixel4
*
)
src
)[
1
]
;
AV_WN4PA
(((
pixel4
*
)(
src
+
y
*
stride
))
+
0
,
a
)
;
AV_WN4PA
(((
pixel4
*
)(
src
+
y
*
stride
))
+
1
,
b
)
;
}
}
static
void
FUNCC
(
pred8x8l_down_left
)(
uint8_t
*
_src
,
int
has_topleft
,
int
has_topright
,
int
_stride
)
...
...
libavcodec/high_bit_depth.h
浏览文件 @
2caf19e9
...
...
@@ -14,6 +14,7 @@
# undef rnd_avg_pixel4
# undef AV_RN2P
# undef AV_RN4P
# undef AV_RN4PA
# undef AV_WN2P
# undef AV_WN4P
# undef AV_WN4PA
...
...
@@ -46,6 +47,7 @@ CLIP_PIXEL(10)
# define rnd_avg_pixel4 rnd_avg64
# define AV_RN2P AV_RN32
# define AV_RN4P AV_RN64
# define AV_RN4PA AV_RN64A
# define AV_WN2P AV_WN32
# define AV_WN4P AV_WN64
# define AV_WN4PA AV_WN64A
...
...
@@ -61,6 +63,7 @@ CLIP_PIXEL(10)
# define rnd_avg_pixel4 rnd_avg32
# define AV_RN2P AV_RN16
# define AV_RN4P AV_RN32
# define AV_RN4PA AV_RN32A
# define AV_WN2P AV_WN16
# define AV_WN4P AV_WN32
# define AV_WN4PA AV_WN32A
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录