Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
261e9348
Commit
261e9348
authored
Nov 27, 2012
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf: add a common function for selecting a pcm codec from parameters
parent
bfe5454c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
57 additions
and
36 deletions
+57
-36
internal.h
libavformat/internal.h
+15
-0
mov.c
libavformat/mov.c
+6
-27
riff.c
libavformat/riff.c
+6
-9
utils.c
libavformat/utils.c
+30
-0
No files found.
libavformat/internal.h
View file @
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
View file @
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
View file @
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
View file @
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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment