Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Stefan Strogin
flac
Commits
86244e07
Commit
86244e07
authored
Jul 20, 2004
by
Josh Coalson
Browse files
obey padding byte requirement when writing WAVE
parent
ab863321
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/flac/decode.c
View file @
86244e07
...
...
@@ -495,9 +495,12 @@ FLAC__bool DecoderSession_process(DecoderSession *d)
}
}
if
(
d
->
is_aiff_out
&&
((
d
->
total_samples
*
d
->
channels
*
((
d
->
bps
+
7
)
/
8
))
&
1
))
{
if
(
(
d
->
is_wave_out
||
d
->
is_aiff_out
)
&&
((
d
->
total_samples
*
d
->
channels
*
((
d
->
bps
+
7
)
/
8
))
&
1
))
{
if
(
flac__utils_fwrite
(
"
\000
"
,
1
,
1
,
d
->
fout
)
!=
1
)
{
print_error_with_state
(
d
,
"ERROR writing pad byte to AIFF SSND chunk"
);
print_error_with_state
(
d
,
d
->
is_wave_out
?
"ERROR writing pad byte to WAVE data chunk"
:
"ERROR writing pad byte to AIFF SSND chunk"
);
return
false
;
}
}
...
...
@@ -615,6 +618,7 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
if
(
!
decoder_session
->
analysis_mode
&&
!
decoder_session
->
test_only
&&
(
decoder_session
->
is_wave_out
||
decoder_session
->
is_aiff_out
))
{
const
char
*
fmt_desc
=
decoder_session
->
is_wave_out
?
"WAVE"
:
"AIFF"
;
FLAC__uint64
data_size
=
decoder_session
->
total_samples
*
decoder_session
->
channels
*
((
decoder_session
->
bps
+
7
)
/
8
);
const
FLAC__uint32
aligned_data_size
=
(
FLAC__uint32
)((
data_size
+
1
)
&
(
~
1U
));
/* we'll check for overflow later */
if
(
decoder_session
->
total_samples
==
0
)
{
if
(
decoder_session
->
fout
==
stdout
)
{
flac__utils_printf
(
stderr
,
1
,
"%s: WARNING, don't have accurate sample count available for %s header.
\n
"
,
decoder_session
->
inbasefilename
,
fmt_desc
);
...
...
@@ -636,7 +640,7 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
if
(
decoder_session
->
wave_chunk_size_fixup
.
needs_fixup
)
decoder_session
->
wave_chunk_size_fixup
.
riff_offset
=
ftell
(
decoder_session
->
fout
);
if
(
!
write_little_endian_uint32
(
decoder_session
->
fout
,
(
FLAC__uint32
)(
data_size
+
36
))
)
/* filesize-8 */
if
(
!
write_little_endian_uint32
(
decoder_session
->
fout
,
aligned_
data_size
+
36
))
/* filesize-8 */
return
false
;
if
(
flac__utils_fwrite
(
"WAVEfmt "
,
1
,
8
,
decoder_session
->
fout
)
!=
8
)
...
...
@@ -673,15 +677,13 @@ FLAC__bool write_necessary_headers(DecoderSession *decoder_session)
return
false
;
}
else
{
const
FLAC__uint32
aligned_data_size
=
(
FLAC__uint32
)((
data_size
+
1
)
&
(
~
1U
));
if
(
flac__utils_fwrite
(
"FORM"
,
1
,
4
,
decoder_session
->
fout
)
!=
4
)
return
false
;
if
(
decoder_session
->
wave_chunk_size_fixup
.
needs_fixup
)
decoder_session
->
wave_chunk_size_fixup
.
riff_offset
=
ftell
(
decoder_session
->
fout
);
if
(
!
write_big_endian_uint32
(
decoder_session
->
fout
,
(
FLAC__uint32
)(
aligned_data_size
+
46
))
)
/* filesize-8 */
if
(
!
write_big_endian_uint32
(
decoder_session
->
fout
,
aligned_data_size
+
46
))
/* filesize-8 */
return
false
;
if
(
flac__utils_fwrite
(
"AIFFCOMM"
,
1
,
8
,
decoder_session
->
fout
)
!=
8
)
...
...
@@ -811,7 +813,7 @@ FLAC__bool fixup_wave_chunk_size(const char *outfilename, FLAC__bool is_wave_out
}
data_size
=
aligned_data_size
=
total_samples
*
channels
*
((
bps
+
7
)
/
8
);
if
(
!
is_wave_out
&&
(
aligned_data_size
&
1
)
)
if
(
aligned_data_size
&
1
)
aligned_data_size
++
;
if
(
fseek
(
f
,
riff_offset
,
SEEK_SET
)
<
0
)
{
...
...
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