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
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
Hide 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 @@
...
@@ -29,19 +29,18 @@
#include "libavutil/mathematics.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/opt.h"
#include "avformat.h"
#include "avformat.h"
#include "
internal
.h"
#include "
avio
.h"
#include "avio_internal.h"
#include "avio_internal.h"
#include "internal.h"
#include "metadata.h"
#include "pcm.h"
#include "pcm.h"
#include "riff.h"
#include "riff.h"
#include "avio.h"
#include "metadata.h"
typedef
struct
WAVDemuxContext
{
typedef
struct
WAVDemuxContext
{
int64_t
data_end
;
int64_t
data_end
;
int
w64
;
int
w64
;
}
WAVDemuxContext
;
}
WAVDemuxContext
;
#if CONFIG_WAV_DEMUXER
#if CONFIG_WAV_DEMUXER
static
int64_t
next_tag
(
AVIOContext
*
pb
,
uint32_t
*
tag
)
static
int64_t
next_tag
(
AVIOContext
*
pb
,
uint32_t
*
tag
)
...
@@ -74,11 +73,9 @@ static int wav_probe(AVProbeData *p)
...
@@ -74,11 +73,9 @@ static int wav_probe(AVProbeData *p)
return
0
;
return
0
;
if
(
!
memcmp
(
p
->
buf
+
8
,
"WAVE"
,
4
))
{
if
(
!
memcmp
(
p
->
buf
+
8
,
"WAVE"
,
4
))
{
if
(
!
memcmp
(
p
->
buf
,
"RIFF"
,
4
))
if
(
!
memcmp
(
p
->
buf
,
"RIFF"
,
4
))
/*
/* Since ACT demuxer has standard WAV header at top of it's
Since ACT demuxer has standard WAV header at top of it's own,
* own, returning score is decreased to avoid probe conflict
returning score is decreased to avoid probe conflict
* between ACT and WAV. */
between ACT and WAV.
*/
return
AVPROBE_SCORE_MAX
-
1
;
return
AVPROBE_SCORE_MAX
-
1
;
else
if
(
!
memcmp
(
p
->
buf
,
"RF64"
,
4
)
&&
else
if
(
!
memcmp
(
p
->
buf
,
"RF64"
,
4
)
&&
!
memcmp
(
p
->
buf
+
12
,
"ds64"
,
4
))
!
memcmp
(
p
->
buf
+
12
,
"ds64"
,
4
))
...
@@ -151,16 +148,22 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
...
@@ -151,16 +148,22 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
if
(
umid_mask
)
{
if
(
umid_mask
)
{
/* the string formatting below is per SMPTE 330M-2004 Annex C */
/* 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 */
/* basic UMID */
snprintf
(
temp
,
sizeof
(
temp
),
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
,
snprintf
(
temp
,
sizeof
(
temp
),
umid_parts
[
0
],
umid_parts
[
1
],
umid_parts
[
2
],
umid_parts
[
3
]);
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
,
umid_parts
[
0
],
umid_parts
[
1
],
umid_parts
[
2
],
umid_parts
[
3
]);
}
else
{
}
else
{
/* extended UMID */
/* 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
],
"0x%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
"%016"
PRIX64
,
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
)
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)
...
@@ -175,7 +178,7 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
/* CodingHistory present */
/* CodingHistory present */
size
-=
602
;
size
-=
602
;
if
(
!
(
coding_history
=
av_malloc
(
size
+
1
)))
if
(
!
(
coding_history
=
av_malloc
(
size
+
1
)))
return
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
);
if
((
ret
=
avio_read
(
s
->
pb
,
coding_history
,
size
))
<
0
)
if
((
ret
=
avio_read
(
s
->
pb
,
coding_history
,
size
))
<
0
)
...
@@ -191,22 +194,22 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
...
@@ -191,22 +194,22 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
}
}
static
const
AVMetadataConv
wav_metadata_conv
[]
=
{
static
const
AVMetadataConv
wav_metadata_conv
[]
=
{
{
"description"
,
"comment"
},
{
"description"
,
"comment"
},
{
"originator"
,
"encoded_by"
},
{
"originator"
,
"encoded_by"
},
{
"origination_date"
,
"date"
},
{
"origination_date"
,
"date"
},
{
"origination_time"
,
"creation_time"
},
{
"origination_time"
,
"creation_time"
},
{
0
},
{
0
},
};
};
/* wav input */
/* wav input */
static
int
wav_read_header
(
AVFormatContext
*
s
)
static
int
wav_read_header
(
AVFormatContext
*
s
)
{
{
int64_t
size
,
av_uninit
(
data_size
);
int64_t
size
,
av_uninit
(
data_size
);
int64_t
sample_count
=
0
;
int64_t
sample_count
=
0
;
int
rf64
;
int
rf64
;
uint32_t
tag
;
uint32_t
tag
;
AVIOContext
*
pb
=
s
->
pb
;
AVIOContext
*
pb
=
s
->
pb
;
AVStream
*
st
=
NULL
;
AVStream
*
st
=
NULL
;
WAVDemuxContext
*
wav
=
s
->
priv_data
;
WAVDemuxContext
*
wav
=
s
->
priv_data
;
int
ret
,
got_fmt
=
0
;
int
ret
,
got_fmt
=
0
;
int64_t
next_tag_ofs
,
data_ofs
=
-
1
;
int64_t
next_tag_ofs
,
data_ofs
=
-
1
;
...
@@ -229,8 +232,10 @@ static int wav_read_header(AVFormatContext *s)
...
@@ -229,8 +232,10 @@ static int wav_read_header(AVFormatContext *s)
if
(
size
<
16
)
if
(
size
<
16
)
return
-
1
;
return
-
1
;
avio_rl64
(
pb
);
/* RIFF size */
avio_rl64
(
pb
);
/* RIFF size */
data_size
=
avio_rl64
(
pb
);
data_size
=
avio_rl64
(
pb
);
sample_count
=
avio_rl64
(
pb
);
sample_count
=
avio_rl64
(
pb
);
if
(
data_size
<
0
||
sample_count
<
0
)
{
if
(
data_size
<
0
||
sample_count
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"negative data_size and/or sample_count in "
av_log
(
s
,
AV_LOG_ERROR
,
"negative data_size and/or sample_count in "
"ds64: data_size = %"
PRId64
", sample_count = %"
PRId64
"
\n
"
,
"ds64: data_size = %"
PRId64
", sample_count = %"
PRId64
"
\n
"
,
...
@@ -241,7 +246,7 @@ static int wav_read_header(AVFormatContext *s)
...
@@ -241,7 +246,7 @@ static int wav_read_header(AVFormatContext *s)
}
}
for
(;;)
{
for
(;;)
{
size
=
next_tag
(
pb
,
&
tag
);
size
=
next_tag
(
pb
,
&
tag
);
next_tag_ofs
=
avio_tell
(
pb
)
+
size
;
next_tag_ofs
=
avio_tell
(
pb
)
+
size
;
if
(
pb
->
eof_reached
)
if
(
pb
->
eof_reached
)
...
@@ -259,14 +264,15 @@ static int wav_read_header(AVFormatContext *s)
...
@@ -259,14 +264,15 @@ static int wav_read_header(AVFormatContext *s)
break
;
break
;
case
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
):
case
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
):
if
(
!
got_fmt
)
{
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
;
return
AVERROR_INVALIDDATA
;
}
}
if
(
rf64
)
{
if
(
rf64
)
{
next_tag_ofs
=
wav
->
data_end
=
avio_tell
(
pb
)
+
data_size
;
next_tag_ofs
=
wav
->
data_end
=
avio_tell
(
pb
)
+
data_size
;
}
else
{
}
else
{
data_size
=
size
;
data_size
=
size
;
next_tag_ofs
=
wav
->
data_end
=
size
?
next_tag_ofs
:
INT64_MAX
;
next_tag_ofs
=
wav
->
data_end
=
size
?
next_tag_ofs
:
INT64_MAX
;
}
}
...
@@ -278,11 +284,11 @@ static int wav_read_header(AVFormatContext *s)
...
@@ -278,11 +284,11 @@ static int wav_read_header(AVFormatContext *s)
if
(
!
pb
->
seekable
||
(
!
rf64
&&
!
size
))
if
(
!
pb
->
seekable
||
(
!
rf64
&&
!
size
))
goto
break_loop
;
goto
break_loop
;
break
;
break
;
case
MKTAG
(
'f'
,
'a'
,
'c'
,
't'
):
case
MKTAG
(
'f'
,
'a'
,
'c'
,
't'
):
if
(
!
sample_count
)
if
(
!
sample_count
)
sample_count
=
avio_rl32
(
pb
);
sample_count
=
avio_rl32
(
pb
);
break
;
break
;
case
MKTAG
(
'b'
,
'e'
,
'x'
,
't'
):
case
MKTAG
(
'b'
,
'e'
,
'x'
,
't'
):
if
((
ret
=
wav_parse_bext_tag
(
s
,
size
))
<
0
)
if
((
ret
=
wav_parse_bext_tag
(
s
,
size
))
<
0
)
return
ret
;
return
ret
;
break
;
break
;
...
@@ -305,6 +311,7 @@ static int wav_read_header(AVFormatContext *s)
...
@@ -305,6 +311,7 @@ static int wav_read_header(AVFormatContext *s)
break
;
break
;
}
}
}
}
break_loop:
break_loop:
if
(
data_ofs
<
0
)
{
if
(
data_ofs
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"no 'data' tag found
\n
"
);
av_log
(
s
,
AV_LOG_ERROR
,
"no 'data' tag found
\n
"
);
...
@@ -313,8 +320,11 @@ break_loop:
...
@@ -313,8 +320,11 @@ break_loop:
avio_seek
(
pb
,
data_ofs
,
SEEK_SET
);
avio_seek
(
pb
,
data_ofs
,
SEEK_SET
);
if
(
!
sample_count
&&
st
->
codec
->
channels
&&
av_get_bits_per_sample
(
st
->
codec
->
codec_id
))
if
(
!
sample_count
&&
st
->
codec
->
channels
&&
sample_count
=
(
data_size
<<
3
)
/
(
st
->
codec
->
channels
*
(
uint64_t
)
av_get_bits_per_sample
(
st
->
codec
->
codec_id
));
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
)
if
(
sample_count
)
st
->
duration
=
sample_count
;
st
->
duration
=
sample_count
;
...
@@ -324,7 +334,8 @@ break_loop:
...
@@ -324,7 +334,8 @@ break_loop:
return
0
;
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
* @return the size of the found chunk
*/
*/
static
int64_t
find_guid
(
AVIOContext
*
pb
,
const
uint8_t
guid1
[
16
])
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])
...
@@ -344,13 +355,14 @@ static int64_t find_guid(AVIOContext *pb, const uint8_t guid1[16])
return
-
1
;
return
-
1
;
}
}
static
const
uint8_t
guid_data
[
16
]
=
{
'd'
,
'a'
,
't'
,
'a'
,
static
const
uint8_t
guid_data
[
16
]
=
{
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
'd'
,
'a'
,
't'
,
'a'
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
#define MAX_SIZE 4096
#define MAX_SIZE 4096
static
int
wav_read_packet
(
AVFormatContext
*
s
,
static
int
wav_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
AVPacket
*
pkt
)
{
{
int
ret
,
size
;
int
ret
,
size
;
int64_t
left
;
int64_t
left
;
...
@@ -360,14 +372,14 @@ static int wav_read_packet(AVFormatContext *s,
...
@@ -360,14 +372,14 @@ static int wav_read_packet(AVFormatContext *s,
st
=
s
->
streams
[
0
];
st
=
s
->
streams
[
0
];
left
=
wav
->
data_end
-
avio_tell
(
s
->
pb
);
left
=
wav
->
data_end
-
avio_tell
(
s
->
pb
);
if
(
left
<=
0
){
if
(
left
<=
0
)
{
if
(
CONFIG_W64_DEMUXER
&&
wav
->
w64
)
if
(
CONFIG_W64_DEMUXER
&&
wav
->
w64
)
left
=
find_guid
(
s
->
pb
,
guid_data
)
-
24
;
left
=
find_guid
(
s
->
pb
,
guid_data
)
-
24
;
else
else
left
=
find_tag
(
s
->
pb
,
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
));
left
=
find_tag
(
s
->
pb
,
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
));
if
(
left
<
0
)
if
(
left
<
0
)
return
AVERROR_EOF
;
return
AVERROR_EOF
;
wav
->
data_end
=
avio_tell
(
s
->
pb
)
+
left
;
wav
->
data_end
=
avio_tell
(
s
->
pb
)
+
left
;
}
}
size
=
MAX_SIZE
;
size
=
MAX_SIZE
;
...
@@ -413,20 +425,25 @@ AVInputFormat ff_wav_demuxer = {
...
@@ -413,20 +425,25 @@ AVInputFormat ff_wav_demuxer = {
.
read_packet
=
wav_read_packet
,
.
read_packet
=
wav_read_packet
,
.
read_seek
=
wav_read_seek
,
.
read_seek
=
wav_read_seek
,
.
flags
=
AVFMT_GENERIC_INDEX
,
.
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 */
#endif
/* CONFIG_WAV_DEMUXER */
#if CONFIG_W64_DEMUXER
#if CONFIG_W64_DEMUXER
static
const
uint8_t
guid_riff
[
16
]
=
{
'r'
,
'i'
,
'f'
,
'f'
,
static
const
uint8_t
guid_riff
[
16
]
=
{
0x2E
,
0x91
,
0xCF
,
0x11
,
0xA5
,
0xD6
,
0x28
,
0xDB
,
0x04
,
0xC1
,
0x00
,
0x00
};
'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'
,
static
const
uint8_t
guid_wave
[
16
]
=
{
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
'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'
,
' '
,
static
const
uint8_t
guid_fmt
[
16
]
=
{
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
'f'
,
'm'
,
't'
,
' '
,
0xF3
,
0xAC
,
0xD3
,
0x11
,
0x8C
,
0xD1
,
0x00
,
0xC0
,
0x4F
,
0x8E
,
0xDB
,
0x8A
};
static
int
w64_probe
(
AVProbeData
*
p
)
static
int
w64_probe
(
AVProbeData
*
p
)
{
{
...
@@ -442,8 +459,8 @@ static int w64_probe(AVProbeData *p)
...
@@ -442,8 +459,8 @@ static int w64_probe(AVProbeData *p)
static
int
w64_read_header
(
AVFormatContext
*
s
)
static
int
w64_read_header
(
AVFormatContext
*
s
)
{
{
int64_t
size
;
int64_t
size
;
AVIOContext
*
pb
=
s
->
pb
;
AVIOContext
*
pb
=
s
->
pb
;
WAVDemuxContext
*
wav
=
s
->
priv_data
;
WAVDemuxContext
*
wav
=
s
->
priv_data
;
AVStream
*
st
;
AVStream
*
st
;
uint8_t
guid
[
16
];
uint8_t
guid
[
16
];
int
ret
;
int
ret
;
...
@@ -452,7 +469,8 @@ static int w64_read_header(AVFormatContext *s)
...
@@ -452,7 +469,8 @@ static int w64_read_header(AVFormatContext *s)
if
(
memcmp
(
guid
,
guid_riff
,
16
))
if
(
memcmp
(
guid
,
guid_riff
,
16
))
return
-
1
;
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
;
return
-
1
;
avio_read
(
pb
,
guid
,
16
);
avio_read
(
pb
,
guid
,
16
);
...
@@ -501,6 +519,6 @@ AVInputFormat ff_w64_demuxer = {
...
@@ -501,6 +519,6 @@ AVInputFormat ff_w64_demuxer = {
.
read_packet
=
wav_read_packet
,
.
read_packet
=
wav_read_packet
,
.
read_seek
=
wav_read_seek
,
.
read_seek
=
wav_read_seek
,
.
flags
=
AVFMT_GENERIC_INDEX
,
.
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 */
#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