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
b0b77b9c
Commit
b0b77b9c
authored
Jul 08, 2012
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
caf: support either old or new style ALAC magic kuki chunk
parent
45870f8b
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
4 deletions
+26
-4
cafdec.c
libavformat/cafdec.c
+26
-4
No files found.
libavformat/cafdec.c
View file @
b0b77b9c
...
...
@@ -121,18 +121,40 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size)
}
else
if
(
st
->
codec
->
codec_id
==
CODEC_ID_ALAC
)
{
#define ALAC_PREAMBLE 12
#define ALAC_HEADER 36
if
(
size
<
ALAC_PREAMBLE
+
ALAC_HEADER
)
{
#define ALAC_NEW_KUKI 24
uint8_t
preamble
[
12
];
if
(
size
<
ALAC_NEW_KUKI
||
size
>
ALAC_PREAMBLE
+
ALAC_HEADER
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"invalid ALAC magic cookie
\n
"
);
avio_skip
(
pb
,
size
);
return
AVERROR_INVALIDDATA
;
}
avio_skip
(
pb
,
ALAC_PREAMBLE
);
avio_read
(
pb
,
preamble
,
ALAC_PREAMBLE
);
st
->
codec
->
extradata
=
av_mallocz
(
ALAC_HEADER
+
FF_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
st
->
codec
->
extradata
)
return
AVERROR
(
ENOMEM
);
avio_read
(
pb
,
st
->
codec
->
extradata
,
ALAC_HEADER
);
/* For the old style cookie, we skip 12 bytes, then read 36 bytes.
* The new style cookie only contains the last 24 bytes of what was
* 36 bytes in the old style cookie, so we fabricate the first 12 bytes
* in that case to maintain compatibility. */
if
(
!
memcmp
(
&
preamble
[
4
],
"frmaalac"
,
8
))
{
if
(
size
<
ALAC_PREAMBLE
+
ALAC_HEADER
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"invalid ALAC magic cookie
\n
"
);
av_freep
(
&
st
->
codec
->
extradata
);
return
AVERROR_INVALIDDATA
;
}
avio_read
(
pb
,
st
->
codec
->
extradata
,
ALAC_HEADER
);
avio_skip
(
pb
,
size
-
ALAC_PREAMBLE
-
ALAC_HEADER
);
}
else
{
AV_WB32
(
st
->
codec
->
extradata
,
36
);
memcpy
(
&
st
->
codec
->
extradata
[
4
],
"alac"
,
4
);
AV_WB32
(
&
st
->
codec
->
extradata
[
8
],
0
);
memcpy
(
&
st
->
codec
->
extradata
[
12
],
preamble
,
12
);
avio_read
(
pb
,
&
st
->
codec
->
extradata
[
24
],
ALAC_NEW_KUKI
-
12
);
avio_skip
(
pb
,
size
-
ALAC_NEW_KUKI
);
}
st
->
codec
->
extradata_size
=
ALAC_HEADER
;
avio_skip
(
pb
,
size
-
ALAC_PREAMBLE
-
ALAC_HEADER
);
}
else
{
st
->
codec
->
extradata
=
av_mallocz
(
size
+
FF_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
st
->
codec
->
extradata
)
...
...
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