Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
e095026a
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,发现更多精彩内容 >>
提交
e095026a
编写于
10月 28, 2002
作者:
F
Fabrice Bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
unified wav header parsing - added extradata support
Originally committed as revision 1092 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
6d2abd6b
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
41 addition
and
57 deletion
+41
-57
libav/asf.c
libav/asf.c
+3
-16
libav/avi.h
libav/avi.h
+2
-0
libav/avidec.c
libav/avidec.c
+2
-14
libav/wav.c
libav/wav.c
+34
-27
未找到文件。
libav/asf.c
浏览文件 @
e095026a
...
...
@@ -745,7 +745,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
ByteIOContext
*
pb
=
&
s
->
pb
;
AVStream
*
st
;
ASFStream
*
asf_st
;
int
size
,
i
,
bps
;
int
size
,
i
;
INT64
gsize
;
av_set_pts_info
(
s
,
32
,
1
,
1000
);
/* 32 bit pts in ms */
...
...
@@ -784,7 +784,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
asf
->
packet_size
=
asf
->
hdr
.
max_pktsize
;
asf
->
nb_packets
=
asf
->
hdr
.
packets_count
;
}
else
if
(
!
memcmp
(
&
g
,
&
stream_header
,
sizeof
(
GUID
)))
{
int
type
,
id
,
total_size
;
int
type
,
total_size
;
unsigned
int
tag1
;
INT64
pos1
,
pos2
;
...
...
@@ -819,20 +819,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
st
->
codec
.
codec_type
=
type
;
st
->
codec
.
frame_rate
=
1000000
;
// us
if
(
type
==
CODEC_TYPE_AUDIO
)
{
id
=
get_le16
(
pb
);
st
->
codec
.
codec_tag
=
id
;
st
->
codec
.
channels
=
get_le16
(
pb
);
st
->
codec
.
sample_rate
=
get_le32
(
pb
);
st
->
codec
.
bit_rate
=
get_le32
(
pb
)
*
8
;
st
->
codec
.
block_align
=
get_le16
(
pb
);
/* block align */
bps
=
get_le16
(
pb
);
/* bits per sample */
st
->
codec
.
codec_id
=
wav_codec_get_id
(
id
,
bps
);
size
=
get_le16
(
pb
);
if
(
size
>
0
)
{
st
->
extra_data
=
av_mallocz
(
size
);
get_buffer
(
pb
,
st
->
extra_data
,
size
);
st
->
extra_data_size
=
size
;
}
get_wav_header
(
pb
,
&
st
->
codec
,
1
);
/* We have to init the frame size at some point .... */
pos2
=
url_ftell
(
pb
);
if
(
gsize
>
(
pos2
+
8
-
pos1
+
24
))
{
...
...
libav/avi.h
浏览文件 @
e095026a
...
...
@@ -17,6 +17,8 @@ typedef struct CodecTag {
void
put_bmp_header
(
ByteIOContext
*
pb
,
AVCodecContext
*
enc
,
CodecTag
*
tags
);
int
put_wav_header
(
ByteIOContext
*
pb
,
AVCodecContext
*
enc
);
int
wav_codec_get_id
(
unsigned
int
tag
,
int
bps
);
void
get_wav_header
(
ByteIOContext
*
pb
,
AVCodecContext
*
codec
,
int
has_extra_data
);
extern
CodecTag
codec_bmp_tags
[];
extern
CodecTag
codec_wav_tags
[];
...
...
libav/avidec.c
浏览文件 @
e095026a
...
...
@@ -51,7 +51,7 @@ int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
ByteIOContext
*
pb
=
&
s
->
pb
;
UINT32
tag
,
tag1
;
int
codec_type
,
stream_index
,
size
,
frame_period
,
bit_rate
;
int
i
,
bps
;
int
i
;
AVStream
*
st
;
/* check RIFF header */
...
...
@@ -160,19 +160,7 @@ int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
url_fskip
(
pb
,
size
-
5
*
4
);
break
;
case
CODEC_TYPE_AUDIO
:
tag1
=
get_le16
(
pb
);
st
->
codec
.
codec_type
=
CODEC_TYPE_AUDIO
;
st
->
codec
.
codec_tag
=
tag1
;
#ifdef DEBUG
printf
(
"audio: 0x%x
\n
"
,
tag1
);
#endif
st
->
codec
.
channels
=
get_le16
(
pb
);
st
->
codec
.
sample_rate
=
get_le32
(
pb
);
st
->
codec
.
bit_rate
=
get_le32
(
pb
)
*
8
;
get_le16
(
pb
);
/* block align */
bps
=
get_le16
(
pb
);
st
->
codec
.
codec_id
=
wav_codec_get_id
(
tag1
,
bps
);
url_fskip
(
pb
,
size
-
4
*
4
);
get_wav_header
(
pb
,
&
st
->
codec
,
(
size
>=
18
));
break
;
default:
url_fskip
(
pb
,
size
);
...
...
libav/wav.c
浏览文件 @
e095026a
/*
* WAV encoder and decoder
* Copyright (c) 2001 Fabrice Bellard.
* Copyright (c) 2001
, 2002
Fabrice Bellard.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
...
...
@@ -29,6 +29,8 @@ CodecTag codec_wav_tags[] = {
{
CODEC_ID_PCM_MULAW
,
0x07
},
{
CODEC_ID_ADPCM_MS
,
0x02
},
{
CODEC_ID_ADPCM_IMA_WAV
,
0x11
},
{
CODEC_ID_WMAV1
,
0x160
},
{
CODEC_ID_WMAV2
,
0x161
},
{
0
,
0
},
};
...
...
@@ -101,6 +103,32 @@ int put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
return
hdrsize
;
}
void
get_wav_header
(
ByteIOContext
*
pb
,
AVCodecContext
*
codec
,
int
has_extra_data
)
{
int
id
,
bps
,
size
;
id
=
get_le16
(
pb
);
codec
->
codec_type
=
CODEC_TYPE_AUDIO
;
codec
->
codec_tag
=
id
;
codec
->
fourcc
=
id
;
codec
->
channels
=
get_le16
(
pb
);
codec
->
sample_rate
=
get_le32
(
pb
);
codec
->
bit_rate
=
get_le32
(
pb
)
*
8
;
codec
->
block_align
=
get_le16
(
pb
);
bps
=
get_le16
(
pb
);
/* bits per sample */
codec
->
codec_id
=
wav_codec_get_id
(
id
,
bps
);
if
(
has_extra_data
)
{
size
=
get_le16
(
pb
);
if
(
size
>
0
)
{
codec
->
extradata
=
av_mallocz
(
size
);
get_buffer
(
pb
,
codec
->
extradata
,
size
);
codec
->
extradata_size
=
size
;
}
}
}
int
wav_codec_get_id
(
unsigned
int
tag
,
int
bps
)
{
int
id
;
...
...
@@ -213,8 +241,6 @@ static int wav_read_header(AVFormatContext *s,
int
size
;
unsigned
int
tag
;
ByteIOContext
*
pb
=
&
s
->
pb
;
unsigned
int
id
,
channels
,
rate
,
bit_rate
,
extra_size
,
bps
;
unsigned
int
blkalign
;
AVStream
*
st
;
/* check RIFF header */
...
...
@@ -231,34 +257,15 @@ static int wav_read_header(AVFormatContext *s,
size
=
find_tag
(
pb
,
MKTAG
(
'f'
,
'm'
,
't'
,
' '
));
if
(
size
<
0
)
return
-
1
;
id
=
get_le16
(
pb
);
channels
=
get_le16
(
pb
);
rate
=
get_le32
(
pb
);
bit_rate
=
get_le32
(
pb
)
*
8
;
blkalign
=
get_le16
(
pb
);
/* block align */
bps
=
get_le16
(
pb
);
/* bits per sample */
if
(
size
>=
18
)
{
/* wav_extra_size */
extra_size
=
get_le16
(
pb
);
/* skip unused data */
url_fseek
(
pb
,
size
-
18
,
SEEK_CUR
);
}
size
=
find_tag
(
pb
,
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
));
if
(
size
<
0
)
return
-
1
;
/* now we are ready: build format streams */
st
=
av_new_stream
(
s
,
0
);
if
(
!
st
)
return
AVERROR_NOMEM
;
st
->
codec
.
codec_type
=
CODEC_TYPE_AUDIO
;
st
->
codec
.
codec_tag
=
id
;
st
->
codec
.
codec_id
=
wav_codec_get_id
(
id
,
bps
);
st
->
codec
.
channels
=
channels
;
st
->
codec
.
sample_rate
=
rate
;
st
->
codec
.
block_align
=
blkalign
;
get_wav_header
(
pb
,
&
st
->
codec
,
(
size
>=
18
));
size
=
find_tag
(
pb
,
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
));
if
(
size
<
0
)
return
-
1
;
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录