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
13f57a4d
Commit
13f57a4d
authored
May 02, 2013
by
Luca Barbato
Committed by
Diego Biurrun
May 02, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wav: K&R formatting cosmetics
Signed-off-by:
Diego Biurrun
<
diego@biurrun.de
>
parent
6b753015
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
70 additions
and
52 deletions
+70
-52
wavdec.c
libavformat/wavdec.c
+70
-52
No files found.
libavformat/wavdec.c
View file @
13f57a4d
...
...
@@ -29,19 +29,18 @@
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "avformat.h"
#include "
internal
.h"
#include "
avio
.h"
#include "avio_internal.h"
#include "internal.h"
#include "metadata.h"
#include "pcm.h"
#include "riff.h"
#include "avio.h"
#include "metadata.h"
typedef
struct
WAVDemuxContext
{
int64_t
data_end
;
int
w64
;
}
WAVDemuxContext
;
#if CONFIG_WAV_DEMUXER
static
int64_t
next_tag
(
AVIOContext
*
pb
,
uint32_t
*
tag
)
...
...
@@ -74,11 +73,9 @@ static int wav_probe(AVProbeData *p)
return
0
;
if
(
!
memcmp
(
p
->
buf
+
8
,
"WAVE"
,
4
))
{
if
(
!
memcmp
(
p
->
buf
,
"RIFF"
,
4
))
/*
Since ACT demuxer has standard WAV header at top of it's own,
returning score is decreased to avoid probe conflict
between ACT and WAV.
*/
/* Since ACT demuxer has standard WAV header at top of it's
* own, returning score is decreased to avoid probe conflict
* between ACT and WAV. */
return
AVPROBE_SCORE_MAX
-
1
;
else
if
(
!
memcmp
(
p
->
buf
,
"RF64"
,
4
)
&&
!
memcmp
(
p
->
buf
+
12
,
"ds64"
,
4
))
...
...
@@ -151,16 +148,22 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
if
(
umid_mask
)
{
/* the string formatting below is per SMPTE 330M-2004 Annex C */
if
(
umid_parts
[
4
]
==
0
&&
umid_parts
[
5
]
==
0
&&
umid_parts
[
6
]
==
0
&&
umid_parts
[
7
]
==
0
)
{
if
(
umid_parts
[
4
]
==
0
&&
umid_parts
[
5
]
==
0
&&
umid_parts
[
6
]
==
0
&&
umid_parts
[
7
]
==
0
)
{
/* basic UMID */
snprintf
(
temp
,
sizeof
(
temp
),
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
,
umid_parts
[
0
],
umid_parts
[
1
],
umid_parts
[
2
],
umid_parts
[
3
]);
snprintf
(
temp
,
sizeof
(
temp
),
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
,
umid_parts
[
0
],
umid_parts
[
1
],
umid_parts
[
2
],
umid_parts
[
3
]);
}
else
{
/* extended UMID */
snprintf
(
temp
,
sizeof
(
temp
),
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
snprintf
(
temp
,
sizeof
(
temp
),
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
,
umid_parts
[
0
],
umid_parts
[
1
],
umid_parts
[
2
],
umid_parts
[
3
],
umid_parts
[
4
],
umid_parts
[
5
],
umid_parts
[
6
],
umid_parts
[
7
]);
umid_parts
[
0
],
umid_parts
[
1
],
umid_parts
[
2
],
umid_parts
[
3
],
umid_parts
[
4
],
umid_parts
[
5
],
umid_parts
[
6
],
umid_parts
[
7
]);
}
if
((
ret
=
av_dict_set
(
&
s
->
metadata
,
"umid"
,
temp
,
0
))
<
0
)
...
...
@@ -175,7 +178,7 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
/* CodingHistory present */
size
-=
602
;
if
(
!
(
coding_history
=
av_malloc
(
size
+
1
)))
if
(
!
(
coding_history
=
av_malloc
(
size
+
1
)))
return
AVERROR
(
ENOMEM
);
if
((
ret
=
avio_read
(
s
->
pb
,
coding_history
,
size
))
<
0
)
...
...
@@ -191,18 +194,18 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
}
static
const
AVMetadataConv
wav_metadata_conv
[]
=
{
{
"description"
,
"comment"
},
{
"originator"
,
"encoded_by"
},
{
"origination_date"
,
"date"
},
{
"origination_time"
,
"creation_time"
},
{
0
},
{
"description"
,
"comment"
},
{
"originator"
,
"encoded_by"
},
{
"origination_date"
,
"date"
},
{
"origination_time"
,
"creation_time"
},
{
0
},
};
/* wav input */
static
int
wav_read_header
(
AVFormatContext
*
s
)
{
int64_t
size
,
av_uninit
(
data_size
);
int64_t
sample_count
=
0
;
int64_t
sample_count
=
0
;
int
rf64
;
uint32_t
tag
;
AVIOContext
*
pb
=
s
->
pb
;
...
...
@@ -229,8 +232,10 @@ static int wav_read_header(AVFormatContext *s)
if
(
size
<
16
)
return
-
1
;
avio_rl64
(
pb
);
/* RIFF size */
data_size
=
avio_rl64
(
pb
);
sample_count
=
avio_rl64
(
pb
);
if
(
data_size
<
0
||
sample_count
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"negative data_size and/or sample_count in "
"ds64: data_size = %"
PRId64
", sample_count = %"
PRId64
"
\n
"
,
...
...
@@ -259,7 +264,8 @@ static int wav_read_header(AVFormatContext *s)
break
;
case
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
):
if
(
!
got_fmt
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"found no 'fmt ' tag before the 'data' tag
\n
"
);
av_log
(
s
,
AV_LOG_ERROR
,
"found no 'fmt ' tag before the 'data' tag
\n
"
);
return
AVERROR_INVALIDDATA
;
}
...
...
@@ -278,11 +284,11 @@ static int wav_read_header(AVFormatContext *s)
if
(
!
pb
->
seekable
||
(
!
rf64
&&
!
size
))
goto
break_loop
;
break
;
case
MKTAG
(
'f'
,
'a'
,
'c'
,
't'
):
case
MKTAG
(
'f'
,
'a'
,
'c'
,
't'
):
if
(
!
sample_count
)
sample_count
=
avio_rl32
(
pb
);
break
;
case
MKTAG
(
'b'
,
'e'
,
'x'
,
't'
):
case
MKTAG
(
'b'
,
'e'
,
'x'
,
't'
):
if
((
ret
=
wav_parse_bext_tag
(
s
,
size
))
<
0
)
return
ret
;
break
;
...
...
@@ -305,6 +311,7 @@ static int wav_read_header(AVFormatContext *s)
break
;
}
}
break_loop:
if
(
data_ofs
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"no 'data' tag found
\n
"
);
...
...
@@ -313,8 +320,11 @@ break_loop:
avio_seek
(
pb
,
data_ofs
,
SEEK_SET
);
if
(
!
sample_count
&&
st
->
codec
->
channels
&&
av_get_bits_per_sample
(
st
->
codec
->
codec_id
))
sample_count
=
(
data_size
<<
3
)
/
(
st
->
codec
->
channels
*
(
uint64_t
)
av_get_bits_per_sample
(
st
->
codec
->
codec_id
));
if
(
!
sample_count
&&
st
->
codec
->
channels
&&
av_get_bits_per_sample
(
st
->
codec
->
codec_id
))
sample_count
=
(
data_size
<<
3
)
/
(
st
->
codec
->
channels
*
(
uint64_t
)
av_get_bits_per_sample
(
st
->
codec
->
codec_id
));
if
(
sample_count
)
st
->
duration
=
sample_count
;
...
...
@@ -324,7 +334,8 @@ break_loop:
return
0
;
}
/** Find chunk with w64 GUID by skipping over other chunks
/**
* Find chunk with w64 GUID by skipping over other chunks.
* @return the size of the found chunk
*/
static
int64_t
find_guid
(
AVIOContext
*
pb
,
const
uint8_t
guid1
[
16
])
...
...
@@ -344,13 +355,14 @@ static int64_t find_guid(AVIOContext *pb, const uint8_t guid1[16])
return
-
1
;
}
static
const
uint8_t
guid_data
[
16
]
=
{
'd'
,
'a'
,
't'
,
'a'
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
static
const
uint8_t
guid_data
[
16
]
=
{
'd'
,
'a'
,
't'
,
'a'
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
#define MAX_SIZE 4096
static
int
wav_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
static
int
wav_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
{
int
ret
,
size
;
int64_t
left
;
...
...
@@ -360,14 +372,14 @@ static int wav_read_packet(AVFormatContext *s,
st
=
s
->
streams
[
0
];
left
=
wav
->
data_end
-
avio_tell
(
s
->
pb
);
if
(
left
<=
0
){
if
(
left
<=
0
)
{
if
(
CONFIG_W64_DEMUXER
&&
wav
->
w64
)
left
=
find_guid
(
s
->
pb
,
guid_data
)
-
24
;
else
left
=
find_tag
(
s
->
pb
,
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
));
if
(
left
<
0
)
return
AVERROR_EOF
;
wav
->
data_end
=
avio_tell
(
s
->
pb
)
+
left
;
wav
->
data_end
=
avio_tell
(
s
->
pb
)
+
left
;
}
size
=
MAX_SIZE
;
...
...
@@ -413,20 +425,25 @@ AVInputFormat ff_wav_demuxer = {
.
read_packet
=
wav_read_packet
,
.
read_seek
=
wav_read_seek
,
.
flags
=
AVFMT_GENERIC_INDEX
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_codec_wav_tags
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[])
{
ff_codec_wav_tags
,
0
},
};
#endif
/* CONFIG_WAV_DEMUXER */
#if CONFIG_W64_DEMUXER
static
const
uint8_t
guid_riff
[
16
]
=
{
'r'
,
'i'
,
'f'
,
'f'
,
0x2E
,
0x91
,
0xCF
,
0x11
,
0xA5
,
0xD6
,
0x28
,
0xDB
,
0x04
,
0xC1
,
0x00
,
0x00
};
static
const
uint8_t
guid_riff
[
16
]
=
{
'r'
,
'i'
,
'f'
,
'f'
,
0x2E
,
0x91
,
0xCF
,
0x11
,
0xA5
,
0xD6
,
0x28
,
0xDB
,
0x04
,
0xC1
,
0x00
,
0x00
};
static
const
uint8_t
guid_wave
[
16
]
=
{
'w'
,
'a'
,
'v'
,
'e'
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
static
const
uint8_t
guid_wave
[
16
]
=
{
'w'
,
'a'
,
'v'
,
'e'
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
static
const
uint8_t
guid_fmt
[
16
]
=
{
'f'
,
'm'
,
't'
,
' '
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
static
const
uint8_t
guid_fmt
[
16
]
=
{
'f'
,
'm'
,
't'
,
' '
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
static
int
w64_probe
(
AVProbeData
*
p
)
{
...
...
@@ -452,7 +469,8 @@ static int w64_read_header(AVFormatContext *s)
if
(
memcmp
(
guid
,
guid_riff
,
16
))
return
-
1
;
if
(
avio_rl64
(
pb
)
<
16
+
8
+
16
+
8
+
16
+
8
)
/* riff + wave + fmt + sizes */
/* riff + wave + fmt + sizes */
if
(
avio_rl64
(
pb
)
<
16
+
8
+
16
+
8
+
16
+
8
)
return
-
1
;
avio_read
(
pb
,
guid
,
16
);
...
...
@@ -501,6 +519,6 @@ AVInputFormat ff_w64_demuxer = {
.
read_packet
=
wav_read_packet
,
.
read_seek
=
wav_read_seek
,
.
flags
=
AVFMT_GENERIC_INDEX
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[])
{
ff_codec_wav_tags
,
0
},
.
codec_tag
=
(
const
AVCodecTag
*
const
[])
{
ff_codec_wav_tags
,
0
},
};
#endif
/* CONFIG_W64_DEMUXER */
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