Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
652f0197
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,发现更多精彩内容 >>
提交
652f0197
编写于
10月 03, 2002
作者:
F
Fabrice Bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
in fact IDCT248 needs to be normalized as I suspected
Originally committed as revision 997 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
5917d17c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
27 addition
and
25 deletion
+27
-25
libavcodec/dct-test.c
libavcodec/dct-test.c
+20
-16
libavcodec/simple_idct.c
libavcodec/simple_idct.c
+7
-9
未找到文件。
libavcodec/dct-test.c
浏览文件 @
652f0197
...
...
@@ -299,10 +299,11 @@ void idct248_ref(UINT8 *dest, int linesize, INT16 *block)
}
/* butterfly */
s
=
0
.
5
*
sqrt
(
2
.
0
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
j
=
0
;
j
<
8
;
j
++
)
{
block1
[
8
*
(
2
*
i
)
+
j
]
=
(
block
[
8
*
(
2
*
i
)
+
j
]
+
block
[
8
*
(
2
*
i
+
1
)
+
j
])
*
0
.
5
;
block1
[
8
*
(
2
*
i
+
1
)
+
j
]
=
(
block
[
8
*
(
2
*
i
)
+
j
]
-
block
[
8
*
(
2
*
i
+
1
)
+
j
])
*
0
.
5
;
block1
[
8
*
(
2
*
i
)
+
j
]
=
(
block
[
8
*
(
2
*
i
)
+
j
]
+
block
[
8
*
(
2
*
i
+
1
)
+
j
])
*
s
;
block1
[
8
*
(
2
*
i
+
1
)
+
j
]
=
(
block
[
8
*
(
2
*
i
)
+
j
]
-
block
[
8
*
(
2
*
i
+
1
)
+
j
])
*
s
;
}
}
...
...
@@ -336,7 +337,7 @@ void idct248_ref(UINT8 *dest, int linesize, INT16 *block)
/* clamp and store the result */
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
j
=
0
;
j
<
8
;
j
++
)
{
v
=
block3
[
8
*
i
+
j
]
+
128
.
0
;
v
=
block3
[
8
*
i
+
j
];
if
(
v
<
0
)
v
=
0
;
else
if
(
v
>
255
)
...
...
@@ -357,13 +358,27 @@ void idct248_error(const char *name,
important here) */
err_max
=
0
;
for
(
it
=
0
;
it
<
NB_ITS
;
it
++
)
{
for
(
i
=
0
;
i
<
64
;
i
++
)
block1
[
i
]
=
(
random
()
%
512
)
-
256
;
/* XXX: use forward transform to generate values */
for
(
i
=
0
;
i
<
64
;
i
++
)
block1
[
i
]
=
(
random
()
%
256
)
-
128
;
block1
[
0
]
+=
1024
;
for
(
i
=
0
;
i
<
64
;
i
++
)
block
[
i
]
=
block1
[
i
];
idct248_ref
(
img_dest1
,
8
,
block
);
for
(
i
=
0
;
i
<
64
;
i
++
)
block
[
i
]
=
block1
[
i
];
idct248_put
(
img_dest
,
8
,
block
);
for
(
i
=
0
;
i
<
64
;
i
++
)
{
v
=
abs
((
int
)
img_dest
[
i
]
-
(
int
)
img_dest1
[
i
]);
if
(
v
==
255
)
printf
(
"%d %d
\n
"
,
img_dest
[
i
],
img_dest1
[
i
]);
if
(
v
>
err_max
)
err_max
=
v
;
}
#if 0
printf("ref=\n");
for(i=0;i<8;i++) {
...
...
@@ -373,13 +388,7 @@ void idct248_error(const char *name,
}
printf("\n");
}
#endif
for
(
i
=
0
;
i
<
64
;
i
++
)
block
[
i
]
=
block1
[
i
];
idct248_put
(
img_dest
,
8
,
block
);
#if 0
printf("out=\n");
for(i=0;i<8;i++) {
int j;
...
...
@@ -389,11 +398,6 @@ void idct248_error(const char *name,
printf("\n");
}
#endif
for
(
i
=
0
;
i
<
64
;
i
++
)
{
v
=
abs
(
img_dest
[
i
]
-
img_dest1
[
i
]);
if
(
v
>
err_max
)
err_max
=
v
;
}
}
printf
(
"%s %s: err_inf=%d
\n
"
,
1
?
"IDCT248"
:
"DCT248"
,
...
...
libavcodec/simple_idct.c
浏览文件 @
652f0197
...
...
@@ -663,14 +663,12 @@ void simple_idct(INT16 *block)
#define CN_SHIFT 12
#define C_FIX(x) ((int)((x) * (1 << CN_SHIFT) + 0.5))
#define C0 C_FIX(0.7071067811)
#define C1 C_FIX(0.9238795324)
#define C2 C_FIX(0.3826834324)
#define C1 C_FIX(0.6532814824)
#define C2 C_FIX(0.2705980501)
/* row idct is multiple by 16 * sqrt(2.0), col idct4 is multiplied by
sqrt(2). An extra division by two is needed for the first butterfly
stage */
#define C_SHIFT (4+1+12+1)
/* row idct is multiple by 16 * sqrt(2.0), col idct4 is normalized,
and the butterfly must be multiplied by 0.5 * sqrt(2.0) */
#define C_SHIFT (4+1+12)
static
inline
void
idct4col
(
UINT8
*
dest
,
int
line_size
,
const
INT16
*
col
)
{
...
...
@@ -681,8 +679,8 @@ static inline void idct4col(UINT8 *dest, int line_size, const INT16 *col)
a1
=
col
[
8
*
2
];
a2
=
col
[
8
*
4
];
a3
=
col
[
8
*
6
];
c0
=
(
a0
+
a2
)
*
C0
+
(
1
<<
(
C_SHIFT
-
1
))
+
(
128
<<
C_SHIFT
);
c2
=
(
a0
-
a2
)
*
C0
+
(
1
<<
(
C_SHIFT
-
1
))
+
(
128
<<
C_SHIFT
);
c0
=
(
(
a0
+
a2
)
<<
(
CN_SHIFT
-
1
))
+
(
1
<<
(
C_SHIFT
-
1
)
);
c2
=
(
(
a0
-
a2
)
<<
(
CN_SHIFT
-
1
))
+
(
1
<<
(
C_SHIFT
-
1
)
);
c1
=
a1
*
C1
+
a3
*
C2
;
c3
=
a1
*
C2
-
a3
*
C1
;
dest
[
0
]
=
cm
[(
c0
+
c1
)
>>
C_SHIFT
];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录