Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
f19af812
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,发现更多精彩内容 >>
提交
f19af812
编写于
10月 15, 2003
作者:
M
Mike Melanson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
replace file to remove nasty DOS CRs and hard tabs
Originally committed as revision 2384 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
f1271366
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
273 addition
and
278 deletion
+273
-278
libavcodec/adx.c
libavcodec/adx.c
+273
-278
未找到文件。
libavcodec/adx.c
浏览文件 @
f19af812
...
@@ -28,163 +28,163 @@
...
@@ -28,163 +28,163 @@
*/
*/
typedef
struct
{
typedef
struct
{
int
s1
,
s2
;
int
s1
,
s2
;
}
PREV
;
}
PREV
;
typedef
struct
{
typedef
struct
{
PREV
prev
[
2
];
PREV
prev
[
2
];
int
header_parsed
;
int
header_parsed
;
unsigned
char
dec_temp
[
18
*
2
];
unsigned
char
dec_temp
[
18
*
2
];
unsigned
short
enc_temp
[
32
*
2
];
unsigned
short
enc_temp
[
32
*
2
];
int
in_temp
;
int
in_temp
;
}
ADXContext
;
}
ADXContext
;
//#define
BASEVOL
0x11e0
//#define
BASEVOL
0x11e0
#define
BASEVOL
0x4000
#define
BASEVOL
0x4000
#define
SCALE1
0x7298
#define
SCALE1
0x7298
#define
SCALE2
0x3350
#define
SCALE2
0x3350
#define
CLIP(s)
if (s>32767) s=32767; else if (s<-32768) s=-32768
#define
CLIP(s)
if (s>32767) s=32767; else if (s<-32768) s=-32768
/* 18
byte
<-> 32 samples */
/* 18
bytes
<-> 32 samples */
#ifdef CONFIG_ENCODERS
#ifdef CONFIG_ENCODERS
static
void
adx_encode
(
unsigned
char
*
adx
,
const
short
*
wav
,
PREV
*
prev
)
static
void
adx_encode
(
unsigned
char
*
adx
,
const
short
*
wav
,
PREV
*
prev
)
{
{
int
scale
;
int
scale
;
int
i
;
int
i
;
int
s0
,
s1
,
s2
,
d
;
int
s0
,
s1
,
s2
,
d
;
int
max
=
0
;
int
max
=
0
;
int
min
=
0
;
int
min
=
0
;
int
data
[
32
];
int
data
[
32
];
s1
=
prev
->
s1
;
s1
=
prev
->
s1
;
s2
=
prev
->
s2
;
s2
=
prev
->
s2
;
for
(
i
=
0
;
i
<
32
;
i
++
)
{
for
(
i
=
0
;
i
<
32
;
i
++
)
{
s0
=
wav
[
i
];
s0
=
wav
[
i
];
d
=
((
s0
<<
14
)
-
SCALE1
*
s1
+
SCALE2
*
s2
)
/
BASEVOL
;
d
=
((
s0
<<
14
)
-
SCALE1
*
s1
+
SCALE2
*
s2
)
/
BASEVOL
;
data
[
i
]
=
d
;
data
[
i
]
=
d
;
if
(
max
<
d
)
max
=
d
;
if
(
max
<
d
)
max
=
d
;
if
(
min
>
d
)
min
=
d
;
if
(
min
>
d
)
min
=
d
;
s2
=
s1
;
s2
=
s1
;
s1
=
s0
;
s1
=
s0
;
}
}
prev
->
s1
=
s1
;
prev
->
s1
=
s1
;
prev
->
s2
=
s2
;
prev
->
s2
=
s2
;
/* -8..+7 */
/* -8..+7 */
if
(
max
==
0
&&
min
==
0
)
{
if
(
max
==
0
&&
min
==
0
)
{
memset
(
adx
,
0
,
18
);
memset
(
adx
,
0
,
18
);
return
;
return
;
}
}
if
(
max
/
7
>-
min
/
8
)
scale
=
max
/
7
;
if
(
max
/
7
>-
min
/
8
)
scale
=
max
/
7
;
else
scale
=
-
min
/
8
;
else
scale
=
-
min
/
8
;
if
(
scale
==
0
)
scale
=
1
;
if
(
scale
==
0
)
scale
=
1
;
adx
[
0
]
=
scale
>>
8
;
adx
[
0
]
=
scale
>>
8
;
adx
[
1
]
=
scale
;
adx
[
1
]
=
scale
;
for
(
i
=
0
;
i
<
16
;
i
++
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
{
adx
[
i
+
2
]
=
((
data
[
i
*
2
]
/
scale
)
<<
4
)
|
((
data
[
i
*
2
+
1
]
/
scale
)
&
0xf
);
adx
[
i
+
2
]
=
((
data
[
i
*
2
]
/
scale
)
<<
4
)
|
((
data
[
i
*
2
+
1
]
/
scale
)
&
0xf
);
}
}
}
}
#endif //CONFIG_ENCODERS
#endif //CONFIG_ENCODERS
static
void
adx_decode
(
short
*
out
,
const
unsigned
char
*
in
,
PREV
*
prev
)
static
void
adx_decode
(
short
*
out
,
const
unsigned
char
*
in
,
PREV
*
prev
)
{
{
int
scale
=
((
in
[
0
]
<<
8
)
|
(
in
[
1
]));
int
scale
=
((
in
[
0
]
<<
8
)
|
(
in
[
1
]));
int
i
;
int
i
;
int
s0
,
s1
,
s2
,
d
;
int
s0
,
s1
,
s2
,
d
;
//
printf("%x ",scale);
//
printf("%x ",scale);
in
+=
2
;
in
+=
2
;
s1
=
prev
->
s1
;
s1
=
prev
->
s1
;
s2
=
prev
->
s2
;
s2
=
prev
->
s2
;
for
(
i
=
0
;
i
<
16
;
i
++
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
{
d
=
in
[
i
];
d
=
in
[
i
];
// d>>=4; if (d&8) d-=16;
// d>>=4; if (d&8) d-=16;
d
=
((
signed
char
)
d
>>
4
);
d
=
((
signed
char
)
d
>>
4
);
s0
=
(
BASEVOL
*
d
*
scale
+
SCALE1
*
s1
-
SCALE2
*
s2
)
>>
14
;
s0
=
(
BASEVOL
*
d
*
scale
+
SCALE1
*
s1
-
SCALE2
*
s2
)
>>
14
;
CLIP
(
s0
);
CLIP
(
s0
);
*
out
++=
s0
;
*
out
++=
s0
;
s2
=
s1
;
s2
=
s1
;
s1
=
s0
;
s1
=
s0
;
d
=
in
[
i
];
d
=
in
[
i
];
//d&=15; if (d&8) d-=16;
//d&=15; if (d&8) d-=16;
d
=
((
signed
char
)(
d
<<
4
)
>>
4
);
d
=
((
signed
char
)(
d
<<
4
)
>>
4
);
s0
=
(
BASEVOL
*
d
*
scale
+
SCALE1
*
s1
-
SCALE2
*
s2
)
>>
14
;
s0
=
(
BASEVOL
*
d
*
scale
+
SCALE1
*
s1
-
SCALE2
*
s2
)
>>
14
;
CLIP
(
s0
);
CLIP
(
s0
);
*
out
++=
s0
;
*
out
++=
s0
;
s2
=
s1
;
s2
=
s1
;
s1
=
s0
;
s1
=
s0
;
}
}
prev
->
s1
=
s1
;
prev
->
s1
=
s1
;
prev
->
s2
=
s2
;
prev
->
s2
=
s2
;
}
}
static
void
adx_decode_stereo
(
short
*
out
,
const
unsigned
char
*
in
,
PREV
*
prev
)
static
void
adx_decode_stereo
(
short
*
out
,
const
unsigned
char
*
in
,
PREV
*
prev
)
{
{
short
tmp
[
32
*
2
];
short
tmp
[
32
*
2
];
int
i
;
int
i
;
adx_decode
(
tmp
,
in
,
prev
);
adx_decode
(
tmp
,
in
,
prev
);
adx_decode
(
tmp
+
32
,
in
+
18
,
prev
+
1
);
adx_decode
(
tmp
+
32
,
in
+
18
,
prev
+
1
);
for
(
i
=
0
;
i
<
32
;
i
++
)
{
for
(
i
=
0
;
i
<
32
;
i
++
)
{
out
[
i
*
2
]
=
tmp
[
i
];
out
[
i
*
2
]
=
tmp
[
i
];
out
[
i
*
2
+
1
]
=
tmp
[
i
+
32
];
out
[
i
*
2
+
1
]
=
tmp
[
i
+
32
];
}
}
}
}
#ifdef CONFIG_ENCODERS
#ifdef CONFIG_ENCODERS
static
void
write_long
(
unsigned
char
*
p
,
uint32_t
v
)
static
void
write_long
(
unsigned
char
*
p
,
uint32_t
v
)
{
{
p
[
0
]
=
v
>>
24
;
p
[
0
]
=
v
>>
24
;
p
[
1
]
=
v
>>
16
;
p
[
1
]
=
v
>>
16
;
p
[
2
]
=
v
>>
8
;
p
[
2
]
=
v
>>
8
;
p
[
3
]
=
v
;
p
[
3
]
=
v
;
}
}
static
int
adx_encode_header
(
AVCodecContext
*
avctx
,
unsigned
char
*
buf
,
size_t
bufsize
)
static
int
adx_encode_header
(
AVCodecContext
*
avctx
,
unsigned
char
*
buf
,
size_t
bufsize
)
{
{
#if 0
#if 0
struct {
struct {
uint32_t offset; /* 0x80000000 + sample start - 4 */
uint32_t offset; /* 0x80000000 + sample start - 4 */
unsigned char unknown1[3]; /* 03 12 04 */
unsigned char unknown1[3]; /* 03 12 04 */
unsigned char channel; /* 1 or 2 */
unsigned char channel; /* 1 or 2 */
uint32_t freq;
uint32_t freq;
uint32_t size;
uint32_t size;
uint32_t unknown2; /* 01 f4 03 00 */
uint32_t unknown2; /* 01 f4 03 00 */
uint32_t unknown3; /* 00 00 00 00 */
uint32_t unknown3; /* 00 00 00 00 */
uint32_t unknown4; /* 00 00 00 00 */
uint32_t unknown4; /* 00 00 00 00 */
/* if loop
/* if loop
unknown3 00 15 00 01
unknown3 00 15 00 01
unknown4 00 00 00 01
unknown4 00 00 00 01
long loop_start_sample;
long loop_start_sample;
long loop_start_byte;
long loop_start_byte;
long loop_end_sample;
long loop_end_sample;
long loop_end_byte;
long loop_end_byte;
long
long
*/
*/
} adxhdr; /* big endian */
} adxhdr; /* big endian */
/* offset-6 "(c)CRI" */
/* offset-6 "(c)CRI" */
#endif
#endif
write_long
(
buf
+
0x00
,
0x80000000
|
0x20
);
write_long
(
buf
+
0x00
,
0x80000000
|
0x20
);
write_long
(
buf
+
0x04
,
0x03120400
|
avctx
->
channels
);
write_long
(
buf
+
0x04
,
0x03120400
|
avctx
->
channels
);
write_long
(
buf
+
0x08
,
avctx
->
sample_rate
);
write_long
(
buf
+
0x08
,
avctx
->
sample_rate
);
write_long
(
buf
+
0x0c
,
0
);
/* FIXME: set after */
write_long
(
buf
+
0x0c
,
0
);
/* FIXME: set after */
write_long
(
buf
+
0x10
,
0x01040300
);
write_long
(
buf
+
0x10
,
0x01040300
);
write_long
(
buf
+
0x14
,
0x00000000
);
write_long
(
buf
+
0x14
,
0x00000000
);
write_long
(
buf
+
0x18
,
0x00000000
);
write_long
(
buf
+
0x18
,
0x00000000
);
memcpy
(
buf
+
0x1c
,
"
\0\0
(c)CRI"
,
8
);
memcpy
(
buf
+
0x1c
,
"
\0\0
(c)CRI"
,
8
);
return
0x20
+
4
;
return
0x20
+
4
;
}
}
static
int
adx_decode_init
(
AVCodecContext
*
avctx
);
static
int
adx_decode_init
(
AVCodecContext
*
avctx
);
...
@@ -213,200 +213,195 @@ static int adx_encode_close(AVCodecContext *avctx)
...
@@ -213,200 +213,195 @@ static int adx_encode_close(AVCodecContext *avctx)
}
}
static
int
adx_encode_frame
(
AVCodecContext
*
avctx
,
static
int
adx_encode_frame
(
AVCodecContext
*
avctx
,
unsigned
char
*
frame
,
int
buf_size
,
const
void
*
data
)
unsigned
char
*
frame
,
int
buf_size
,
const
void
*
data
)
{
{
ADXContext
*
c
=
avctx
->
priv_data
;
ADXContext
*
c
=
avctx
->
priv_data
;
const
short
*
samples
=
data
;
const
short
*
samples
=
data
;
unsigned
char
*
dst
=
frame
;
unsigned
char
*
dst
=
frame
;
int
rest
=
avctx
->
frame_size
;
int
rest
=
avctx
->
frame_size
;
/*
/*
input data size =
input data size =
ffmpeg.c: do_audio_out()
ffmpeg.c: do_audio_out()
frame_bytes = enc->frame_size * 2 * enc->channels;
frame_bytes = enc->frame_size * 2 * enc->channels;
*/
*/
//
printf("sz=%d ",buf_size); fflush(stdout);
//
printf("sz=%d ",buf_size); fflush(stdout);
if
(
!
c
->
header_parsed
)
{
if
(
!
c
->
header_parsed
)
{
int
hdrsize
=
adx_encode_header
(
avctx
,
dst
,
buf_size
);
int
hdrsize
=
adx_encode_header
(
avctx
,
dst
,
buf_size
);
dst
+=
hdrsize
;
dst
+=
hdrsize
;
c
->
header_parsed
=
1
;
c
->
header_parsed
=
1
;
}
}
if
(
avctx
->
channels
==
1
)
{
if
(
avctx
->
channels
==
1
)
{
while
(
rest
>=
32
)
{
while
(
rest
>=
32
)
{
adx_encode
(
dst
,
samples
,
c
->
prev
);
adx_encode
(
dst
,
samples
,
c
->
prev
);
dst
+=
18
;
dst
+=
18
;
samples
+=
32
;
samples
+=
32
;
rest
-=
32
;
rest
-=
32
;
}
}
}
else
{
}
else
{
while
(
rest
>=
32
*
2
)
{
while
(
rest
>=
32
*
2
)
{
short
tmpbuf
[
32
*
2
];
short
tmpbuf
[
32
*
2
];
int
i
;
int
i
;
for
(
i
=
0
;
i
<
32
;
i
++
)
{
for
(
i
=
0
;
i
<
32
;
i
++
)
{
tmpbuf
[
i
]
=
samples
[
i
*
2
];
tmpbuf
[
i
]
=
samples
[
i
*
2
];
tmpbuf
[
i
+
32
]
=
samples
[
i
*
2
+
1
];
tmpbuf
[
i
+
32
]
=
samples
[
i
*
2
+
1
];
}
}
adx_encode
(
dst
,
tmpbuf
,
c
->
prev
);
adx_encode
(
dst
,
tmpbuf
,
c
->
prev
);
adx_encode
(
dst
+
18
,
tmpbuf
+
32
,
c
->
prev
+
1
);
adx_encode
(
dst
+
18
,
tmpbuf
+
32
,
c
->
prev
+
1
);
dst
+=
18
*
2
;
dst
+=
18
*
2
;
samples
+=
32
*
2
;
samples
+=
32
*
2
;
rest
-=
32
*
2
;
rest
-=
32
*
2
;
}
}
}
}
return
dst
-
frame
;
return
dst
-
frame
;
}
}
#endif //CONFIG_ENCODERS
#endif //CONFIG_ENCODERS
static
uint32_t
read_long
(
const
unsigned
char
*
p
)
static
uint32_t
read_long
(
const
unsigned
char
*
p
)
{
{
return
(
p
[
0
]
<<
24
)
|
(
p
[
1
]
<<
16
)
|
(
p
[
2
]
<<
8
)
|
p
[
3
];
return
(
p
[
0
]
<<
24
)
|
(
p
[
1
]
<<
16
)
|
(
p
[
2
]
<<
8
)
|
p
[
3
];
}
}
int
is_adx
(
const
unsigned
char
*
buf
,
size_t
bufsize
)
int
is_adx
(
const
unsigned
char
*
buf
,
size_t
bufsize
)
{
{
int
offset
;
int
offset
;
if
(
buf
[
0
]
!=
0x80
)
return
0
;
if
(
buf
[
0
]
!=
0x80
)
return
0
;
offset
=
(
read_long
(
buf
)
^
0x80000000
)
+
4
;
offset
=
(
read_long
(
buf
)
^
0x80000000
)
+
4
;
if
(
bufsize
<
offset
||
memcmp
(
buf
+
offset
-
6
,
"(c)CRI"
,
6
))
return
0
;
if
(
bufsize
<
offset
||
memcmp
(
buf
+
offset
-
6
,
"(c)CRI"
,
6
))
return
0
;
return
offset
;
return
offset
;
}
}
/* return data offset or 6 */
/* return data offset or 6 */
static
int
adx_decode_header
(
AVCodecContext
*
avctx
,
const
unsigned
char
*
buf
,
size_t
bufsize
)
static
int
adx_decode_header
(
AVCodecContext
*
avctx
,
const
unsigned
char
*
buf
,
size_t
bufsize
)
{
{
int
offset
;
int
offset
;
int
channels
,
freq
,
size
;
int
channels
,
freq
,
size
;
offset
=
is_adx
(
buf
,
bufsize
);
offset
=
is_adx
(
buf
,
bufsize
);
if
(
offset
==
0
)
return
0
;
if
(
offset
==
0
)
return
0
;
channels
=
buf
[
7
];
channels
=
buf
[
7
];
freq
=
read_long
(
buf
+
8
);
freq
=
read_long
(
buf
+
8
);
size
=
read_long
(
buf
+
12
);
size
=
read_long
(
buf
+
12
);
//
printf("freq=%d ch=%d\n",freq,channels);
//
printf("freq=%d ch=%d\n",freq,channels);
avctx
->
sample_rate
=
freq
;
avctx
->
sample_rate
=
freq
;
avctx
->
channels
=
channels
;
avctx
->
channels
=
channels
;
avctx
->
bit_rate
=
freq
*
channels
*
18
*
8
/
32
;
avctx
->
bit_rate
=
freq
*
channels
*
18
*
8
/
32
;
//
avctx->frame_size = 18*channels;
//
avctx->frame_size = 18*channels;
return
offset
;
return
offset
;
}
}
static
int
adx_decode_init
(
AVCodecContext
*
avctx
)
static
int
adx_decode_init
(
AVCodecContext
*
avctx
)
{
{
ADXContext
*
c
=
avctx
->
priv_data
;
ADXContext
*
c
=
avctx
->
priv_data
;
//
printf("adx_decode_init\n"); fflush(stdout);
//
printf("adx_decode_init\n"); fflush(stdout);
c
->
prev
[
0
].
s1
=
0
;
c
->
prev
[
0
].
s1
=
0
;
c
->
prev
[
0
].
s2
=
0
;
c
->
prev
[
0
].
s2
=
0
;
c
->
prev
[
1
].
s1
=
0
;
c
->
prev
[
1
].
s1
=
0
;
c
->
prev
[
1
].
s2
=
0
;
c
->
prev
[
1
].
s2
=
0
;
c
->
header_parsed
=
0
;
c
->
header_parsed
=
0
;
c
->
in_temp
=
0
;
c
->
in_temp
=
0
;
return
0
;
return
0
;
}
}
static
void
dump
(
unsigned
char
*
buf
,
size_t
len
)
static
void
dump
(
unsigned
char
*
buf
,
size_t
len
)
{
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
for
(
i
=
0
;
i
<
len
;
i
++
)
{
if
((
i
&
15
)
==
0
)
printf
(
"%04x "
,
i
);
if
((
i
&
15
)
==
0
)
printf
(
"%04x "
,
i
);
printf
(
"%02x "
,
buf
[
i
]);
printf
(
"%02x "
,
buf
[
i
]);
if
((
i
&
15
)
==
15
)
printf
(
"
\n
"
);
if
((
i
&
15
)
==
15
)
printf
(
"
\n
"
);
}
}
printf
(
"
\n
"
);
printf
(
"
\n
"
);
}
}
static
int
adx_decode_frame
(
AVCodecContext
*
avctx
,
static
int
adx_decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
void
*
data
,
int
*
data_size
,
const
uint8_t
*
buf0
,
int
buf_size
)
const
uint8_t
*
buf0
,
int
buf_size
)
{
{
ADXContext
*
c
=
avctx
->
priv_data
;
ADXContext
*
c
=
avctx
->
priv_data
;
short
*
samples
=
data
;
short
*
samples
=
data
;
const
uint8_t
*
buf
=
buf0
;
const
uint8_t
*
buf
=
buf0
;
int
rest
=
buf_size
;
int
rest
=
buf_size
;
if
(
!
c
->
header_parsed
)
{
if
(
!
c
->
header_parsed
)
{
int
hdrsize
=
adx_decode_header
(
avctx
,
buf
,
rest
);
int
hdrsize
=
adx_decode_header
(
avctx
,
buf
,
rest
);
if
(
hdrsize
==
0
)
return
-
1
;
if
(
hdrsize
==
0
)
return
-
1
;
c
->
header_parsed
=
1
;
c
->
header_parsed
=
1
;
buf
+=
hdrsize
;
buf
+=
hdrsize
;
rest
-=
hdrsize
;
rest
-=
hdrsize
;
}
}
if
(
c
->
in_temp
)
{
if
(
c
->
in_temp
)
{
int
copysize
=
18
*
avctx
->
channels
-
c
->
in_temp
;
int
copysize
=
18
*
avctx
->
channels
-
c
->
in_temp
;
memcpy
(
c
->
dec_temp
+
c
->
in_temp
,
buf
,
copysize
);
memcpy
(
c
->
dec_temp
+
c
->
in_temp
,
buf
,
copysize
);
rest
-=
copysize
;
rest
-=
copysize
;
buf
+=
copysize
;
buf
+=
copysize
;
if
(
avctx
->
channels
==
1
)
{
if
(
avctx
->
channels
==
1
)
{
adx_decode
(
samples
,
c
->
dec_temp
,
c
->
prev
);
adx_decode
(
samples
,
c
->
dec_temp
,
c
->
prev
);
samples
+=
32
;
samples
+=
32
;
}
else
{
}
else
{
adx_decode_stereo
(
samples
,
c
->
dec_temp
,
c
->
prev
);
adx_decode_stereo
(
samples
,
c
->
dec_temp
,
c
->
prev
);
samples
+=
32
*
2
;
samples
+=
32
*
2
;
}
}
}
}
//
//
if
(
avctx
->
channels
==
1
)
{
if
(
avctx
->
channels
==
1
)
{
while
(
rest
>=
18
)
{
while
(
rest
>=
18
)
{
adx_decode
(
samples
,
buf
,
c
->
prev
);
adx_decode
(
samples
,
buf
,
c
->
prev
);
rest
-=
18
;
rest
-=
18
;
buf
+=
18
;
buf
+=
18
;
samples
+=
32
;
samples
+=
32
;
}
}
}
else
{
}
else
{
while
(
rest
>=
18
*
2
)
{
while
(
rest
>=
18
*
2
)
{
adx_decode_stereo
(
samples
,
buf
,
c
->
prev
);
adx_decode_stereo
(
samples
,
buf
,
c
->
prev
);
rest
-=
18
*
2
;
rest
-=
18
*
2
;
buf
+=
18
*
2
;
buf
+=
18
*
2
;
samples
+=
32
*
2
;
samples
+=
32
*
2
;
}
}
}
}
//
//
c
->
in_temp
=
rest
;
c
->
in_temp
=
rest
;
if
(
rest
)
{
if
(
rest
)
{
memcpy
(
c
->
dec_temp
,
buf
,
rest
);
memcpy
(
c
->
dec_temp
,
buf
,
rest
);
buf
+=
rest
;
buf
+=
rest
;
}
}
*
data_size
=
(
uint8_t
*
)
samples
-
(
uint8_t
*
)
data
;
*
data_size
=
(
uint8_t
*
)
samples
-
(
uint8_t
*
)
data
;
//
printf("%d:%d ",buf-buf0,*data_size); fflush(stdout);
//
printf("%d:%d ",buf-buf0,*data_size); fflush(stdout);
return
buf
-
buf0
;
return
buf
-
buf0
;
}
}
#
define DEFINE_ENCODER(id, name, context) \
#
ifdef CONFIG_ENCODERS
AVCodec
name ## _encoder = { \
AVCodec
adx_adpcm_encoder
=
{
#name, \
"adx_adpcm"
,
CODEC_TYPE_AUDIO,
\
CODEC_TYPE_AUDIO
,
id, \
CODEC_ID_ADPCM_ADX
,
sizeof(
context), \
sizeof
(
ADXContext
),
name ## _encode_init, \
adx_encode_init
,
name ## _encode_frame, \
adx_encode_frame
,
name ## _encode_close, \
adx_encode_close
,
NULL,
\
NULL
,
};
};
#endif //CONFIG_ENCODERS
#define DEFINE_DECODER(id, name, context) \
AVCodec
adx_adpcm_decoder
=
{
AVCodec name ## _decoder = { \
"adx_adpcm"
,
#name, \
CODEC_TYPE_AUDIO
,
CODEC_TYPE_AUDIO, \
CODEC_ID_ADPCM_ADX
,
id, \
sizeof
(
ADXContext
),
sizeof(context), \
adx_decode_init
,
name ## _decode_init, \
NULL
,
NULL, \
NULL
,
NULL, \
adx_decode_frame
,
name ## _decode_frame, \
};
};
#ifdef CONFIG_ENCODERS
DEFINE_ENCODER
(
CODEC_ID_ADPCM_ADX
,
adx
,
ADXContext
)
#endif //CONFIG_ENCODERS
DEFINE_DECODER
(
CODEC_ID_ADPCM_ADX
,
adx
,
ADXContext
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录