Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
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);
...
@@ -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
);
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 */
#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)
...
@@ -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
)
enum
AVCodecID
ff_mov_get_lpcm_codec_id
(
int
bps
,
int
flags
)
{
{
if
(
flags
&
1
)
{
// floating point
/* lpcm flags:
if
(
flags
&
2
)
{
// big endian
* 0x1 = float
if
(
bps
==
32
)
return
AV_CODEC_ID_PCM_F32BE
;
* 0x2 = big-endian
else
if
(
bps
==
64
)
return
AV_CODEC_ID_PCM_F64BE
;
* 0x4 = signed
}
else
{
*/
if
(
bps
==
32
)
return
AV_CODEC_ID_PCM_F32LE
;
return
ff_get_pcm_codec_id
(
bps
,
flags
&
1
,
flags
&
2
,
flags
&
4
?
-
1
:
0
);
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
;
}
}
int
ff_mov_read_stsd_entries
(
MOVContext
*
c
,
AVIOContext
*
pb
,
int
entries
)
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)
...
@@ -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
);
id
=
ff_codec_get_id
(
ff_codec_wav_tags
,
tag
);
if
(
id
<=
0
)
if
(
id
<=
0
)
return
id
;
return
id
;
/* handle specific u8 codec */
if
(
id
==
AV_CODEC_ID_PCM_S16LE
&&
bps
==
8
)
if
(
id
==
AV_CODEC_ID_PCM_S16LE
)
id
=
AV_CODEC_ID_PCM_U8
;
id
=
ff_get_pcm_codec_id
(
bps
,
0
,
0
,
~
1
);
if
(
id
==
AV_CODEC_ID_PCM_S16LE
&&
bps
==
24
)
else
if
(
id
==
AV_CODEC_ID_PCM_F32LE
)
id
=
AV_CODEC_ID_PCM_S24LE
;
id
=
ff_get_pcm_codec_id
(
bps
,
1
,
0
,
0
);
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_ADPCM_IMA_WAV
&&
bps
==
8
)
if
(
id
==
AV_CODEC_ID_ADPCM_IMA_WAV
&&
bps
==
8
)
id
=
AV_CODEC_ID_PCM_ZORK
;
id
=
AV_CODEC_ID_PCM_ZORK
;
return
id
;
return
id
;
...
...
libavformat/utils.c
View file @
261e9348
...
@@ -2135,6 +2135,36 @@ enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
...
@@ -2135,6 +2135,36 @@ enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
return
AV_CODEC_ID_NONE
;
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
)
unsigned
int
av_codec_get_tag
(
const
AVCodecTag
*
const
*
tags
,
enum
AVCodecID
id
)
{
{
int
i
;
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