Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
261e9348
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,发现更多精彩内容 >>
提交
261e9348
编写于
11月 27, 2012
作者:
J
Justin Ruggles
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lavf: add a common function for selecting a pcm codec from parameters
上级
bfe5454c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
57 addition
and
36 deletion
+57
-36
libavformat/internal.h
libavformat/internal.h
+15
-0
libavformat/mov.c
libavformat/mov.c
+6
-27
libavformat/riff.c
libavformat/riff.c
+6
-9
libavformat/utils.c
libavformat/utils.c
+30
-0
未找到文件。
libavformat/internal.h
浏览文件 @
261e9348
...
...
@@ -358,4 +358,19 @@ unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);
enum
AVCodecID
ff_codec_get_id
(
const
AVCodecTag
*
tags
,
unsigned
int
tag
);
/**
* Select a PCM codec based on the given parameters.
*
* @param bps bits-per-sample
* @param flt floating-point
* @param be big-endian
* @param sflags signed flags. each bit corresponds to one byte of bit depth.
* e.g. the 1st bit indicates if 8-bit should be signed or
* unsigned, the 2nd bit indicates if 16-bit should be signed or
* unsigned, etc... This is useful for formats such as WAVE where
* only 8-bit is unsigned and all other bit depths are signed.
* @return a PCM codec id or AV_CODEC_ID_NONE
*/
enum
AVCodecID
ff_get_pcm_codec_id
(
int
bps
,
int
flt
,
int
be
,
int
sflags
);
#endif
/* AVFORMAT_INTERNAL_H */
libavformat/mov.c
浏览文件 @
261e9348
...
...
@@ -1057,33 +1057,12 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, MOVAtom atom)
*/
enum
AVCodecID
ff_mov_get_lpcm_codec_id
(
int
bps
,
int
flags
)
{
if
(
flags
&
1
)
{
// floating point
if
(
flags
&
2
)
{
// big endian
if
(
bps
==
32
)
return
AV_CODEC_ID_PCM_F32BE
;
else
if
(
bps
==
64
)
return
AV_CODEC_ID_PCM_F64BE
;
}
else
{
if
(
bps
==
32
)
return
AV_CODEC_ID_PCM_F32LE
;
else
if
(
bps
==
64
)
return
AV_CODEC_ID_PCM_F64LE
;
}
}
else
{
if
(
flags
&
2
)
{
if
(
bps
==
8
)
// signed integer
if
(
flags
&
4
)
return
AV_CODEC_ID_PCM_S8
;
else
return
AV_CODEC_ID_PCM_U8
;
else
if
(
bps
==
16
)
return
AV_CODEC_ID_PCM_S16BE
;
else
if
(
bps
==
24
)
return
AV_CODEC_ID_PCM_S24BE
;
else
if
(
bps
==
32
)
return
AV_CODEC_ID_PCM_S32BE
;
}
else
{
if
(
bps
==
8
)
if
(
flags
&
4
)
return
AV_CODEC_ID_PCM_S8
;
else
return
AV_CODEC_ID_PCM_U8
;
else
if
(
bps
==
16
)
return
AV_CODEC_ID_PCM_S16LE
;
else
if
(
bps
==
24
)
return
AV_CODEC_ID_PCM_S24LE
;
else
if
(
bps
==
32
)
return
AV_CODEC_ID_PCM_S32LE
;
}
}
return
AV_CODEC_ID_NONE
;
/* lpcm flags:
* 0x1 = float
* 0x2 = big-endian
* 0x4 = signed
*/
return
ff_get_pcm_codec_id
(
bps
,
flags
&
1
,
flags
&
2
,
flags
&
4
?
-
1
:
0
);
}
int
ff_mov_read_stsd_entries
(
MOVContext
*
c
,
AVIOContext
*
pb
,
int
entries
)
...
...
libavformat/riff.c
浏览文件 @
261e9348
...
...
@@ -678,15 +678,12 @@ enum AVCodecID ff_wav_codec_get_id(unsigned int tag, int bps)
id
=
ff_codec_get_id
(
ff_codec_wav_tags
,
tag
);
if
(
id
<=
0
)
return
id
;
/* handle specific u8 codec */
if
(
id
==
AV_CODEC_ID_PCM_S16LE
&&
bps
==
8
)
id
=
AV_CODEC_ID_PCM_U8
;
if
(
id
==
AV_CODEC_ID_PCM_S16LE
&&
bps
==
24
)
id
=
AV_CODEC_ID_PCM_S24LE
;
if
(
id
==
AV_CODEC_ID_PCM_S16LE
&&
bps
==
32
)
id
=
AV_CODEC_ID_PCM_S32LE
;
if
(
id
==
AV_CODEC_ID_PCM_F32LE
&&
bps
==
64
)
id
=
AV_CODEC_ID_PCM_F64LE
;
if
(
id
==
AV_CODEC_ID_PCM_S16LE
)
id
=
ff_get_pcm_codec_id
(
bps
,
0
,
0
,
~
1
);
else
if
(
id
==
AV_CODEC_ID_PCM_F32LE
)
id
=
ff_get_pcm_codec_id
(
bps
,
1
,
0
,
0
);
if
(
id
==
AV_CODEC_ID_ADPCM_IMA_WAV
&&
bps
==
8
)
id
=
AV_CODEC_ID_PCM_ZORK
;
return
id
;
...
...
libavformat/utils.c
浏览文件 @
261e9348
...
...
@@ -2135,6 +2135,36 @@ enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
return
AV_CODEC_ID_NONE
;
}
enum
AVCodecID
ff_get_pcm_codec_id
(
int
bps
,
int
flt
,
int
be
,
int
sflags
)
{
if
(
flt
)
{
switch
(
bps
)
{
case
32
:
return
be
?
AV_CODEC_ID_PCM_F32BE
:
AV_CODEC_ID_PCM_F32LE
;
case
64
:
return
be
?
AV_CODEC_ID_PCM_F64BE
:
AV_CODEC_ID_PCM_F64LE
;
default:
return
AV_CODEC_ID_NONE
;
}
}
else
{
bps
>>=
3
;
if
(
sflags
&
(
1
<<
(
bps
-
1
)))
{
switch
(
bps
)
{
case
1
:
return
AV_CODEC_ID_PCM_S8
;
case
2
:
return
be
?
AV_CODEC_ID_PCM_S16BE
:
AV_CODEC_ID_PCM_S16LE
;
case
3
:
return
be
?
AV_CODEC_ID_PCM_S24BE
:
AV_CODEC_ID_PCM_S24LE
;
case
4
:
return
be
?
AV_CODEC_ID_PCM_S32BE
:
AV_CODEC_ID_PCM_S32LE
;
default:
return
AV_CODEC_ID_NONE
;
}
}
else
{
switch
(
bps
)
{
case
1
:
return
AV_CODEC_ID_PCM_U8
;
case
2
:
return
be
?
AV_CODEC_ID_PCM_U16BE
:
AV_CODEC_ID_PCM_U16LE
;
case
3
:
return
be
?
AV_CODEC_ID_PCM_U24BE
:
AV_CODEC_ID_PCM_U24LE
;
case
4
:
return
be
?
AV_CODEC_ID_PCM_U32BE
:
AV_CODEC_ID_PCM_U32LE
;
default:
return
AV_CODEC_ID_NONE
;
}
}
}
}
unsigned
int
av_codec_get_tag
(
const
AVCodecTag
*
const
*
tags
,
enum
AVCodecID
id
)
{
int
i
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录