Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
flac
Commits
ef0800da
Commit
ef0800da
authored
Aug 08, 2002
by
Josh Coalson
Browse files
fix bug in stats reporting
parent
89caa900
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/flac/encode.c
View file @
ef0800da
...
...
@@ -40,11 +40,6 @@
#endif
#define min(x,y) ((x)<(y)?(x):(y))
#ifdef max
#undef max
#endif
#define max(x,y) ((x)>(y)?(x):(y))
/* this MUST be >= 588 so that sector aligning can take place with one read */
#define CHUNK_OF_SAMPLES 2048
...
...
@@ -62,6 +57,8 @@ typedef struct {
FLAC__uint64
total_samples_to_encode
;
FLAC__uint64
bytes_written
;
FLAC__uint64
samples_written
;
unsigned
blocksize
;
unsigned
stats_mask
;
/*
* We use flac.stream for encoding native FLAC to stdout
...
...
@@ -112,7 +109,8 @@ static void format_input(FLAC__int32 *dest[], unsigned wide_samples, FLAC__bool
static
FLAC__StreamEncoderWriteStatus
ogg_stream_encoder_write_callback
(
const
OggFLAC__StreamEncoder
*
encoder
,
const
FLAC__byte
buffer
[],
unsigned
bytes
,
unsigned
samples
,
unsigned
current_frame
,
void
*
client_data
);
#endif
static
FLAC__StreamEncoderWriteStatus
flac_stream_encoder_write_callback
(
const
FLAC__StreamEncoder
*
encoder
,
const
FLAC__byte
buffer
[],
unsigned
bytes
,
unsigned
samples
,
unsigned
current_frame
,
void
*
client_data
);
static
void
flac_file_encoder_progress_callback
(
const
FLAC__FileEncoder
*
encoder
,
FLAC__uint64
bytes_written
,
unsigned
frames_written
,
unsigned
total_frames_estimate
,
void
*
client_data
);
static
void
flac_stream_encoder_metadata_callback
(
const
FLAC__StreamEncoder
*
encoder
,
const
FLAC__StreamMetadata
*
metadata
,
void
*
client_data
);
static
void
flac_file_encoder_progress_callback
(
const
FLAC__FileEncoder
*
encoder
,
FLAC__uint64
bytes_written
,
FLAC__uint64
samples_written
,
unsigned
frames_written
,
unsigned
total_frames_estimate
,
void
*
client_data
);
static
void
print_stats
(
const
EncoderSession
*
encoder_session
);
static
void
print_error_with_state
(
const
EncoderSession
*
e
,
const
char
*
message
);
static
void
print_verify_error
(
EncoderSession
*
e
);
...
...
@@ -933,6 +931,8 @@ FLAC__bool EncoderSession_construct(EncoderSession *e, FLAC__bool use_ogg, FLAC_
e
->
total_samples_to_encode
=
0
;
e
->
bytes_written
=
0
;
e
->
samples_written
=
0
;
e
->
blocksize
=
0
;
e
->
stats_mask
=
0
;
e
->
encoder
.
flac
.
stream
=
0
;
e
->
encoder
.
flac
.
file
=
0
;
...
...
@@ -1132,6 +1132,9 @@ FLAC__bool EncoderSession_init_encoder(EncoderSession *e, encode_options_t optio
metadata
[
num_metadata
++
]
=
&
padding
;
}
e
->
blocksize
=
options
.
blocksize
;
e
->
stats_mask
=
(
options
.
do_exhaustive_model_search
||
options
.
do_qlp_coeff_prec_search
)
?
0x0f
:
0x3f
;
#ifdef FLAC__HAS_OGG
if
(
e
->
use_ogg
)
{
OggFLAC__stream_encoder_set_verify
(
e
->
encoder
.
ogg
.
stream
,
options
.
verify
);
...
...
@@ -1378,12 +1381,18 @@ void format_input(FLAC__int32 *dest[], unsigned wide_samples, FLAC__bool is_big_
FLAC__StreamEncoderWriteStatus
ogg_stream_encoder_write_callback
(
const
OggFLAC__StreamEncoder
*
encoder
,
const
FLAC__byte
buffer
[],
unsigned
bytes
,
unsigned
samples
,
unsigned
current_frame
,
void
*
client_data
)
{
EncoderSession
*
encoder_session
=
(
EncoderSession
*
)
client_data
;
const
unsigned
mask
=
(
OggFLAC__stream_encoder_get_do_exhaustive_model_search
(
encoder
)
||
OggFLAC__stream_encoder_get_do_qlp_coeff_prec_search
(
encoder
))
?
0x1f
:
0x7f
;
encoder_session
->
bytes_written
+=
bytes
;
encoder_session
->
samples_written
+=
samples
;
/*
* With Ogg FLAC we don't get one write callback per frame and
* we don't have good number for 'samples', so we estimate based
* on the frame number and the knowledge that all blocks (except
* the last) are the same size.
*/
(
void
)
samples
;
encoder_session
->
samples_written
=
(
current_frame
+
1
)
*
encoder_session
->
blocksize
;
if
(
samples
&&
encoder_session
->
verbose
&&
encoder_session
->
total_samples_to_encode
>
0
&&
!
(
current_frame
&
mask
))
if
(
encoder_session
->
verbose
&&
encoder_session
->
total_samples_to_encode
>
0
&&
!
(
current_frame
&
encoder_session
->
stats_
mask
))
print_stats
(
encoder_session
);
if
(
fwrite
(
buffer
,
sizeof
(
FLAC__byte
),
bytes
,
encoder_session
->
fout
)
==
bytes
)
...
...
@@ -1396,12 +1405,13 @@ FLAC__StreamEncoderWriteStatus ogg_stream_encoder_write_callback(const OggFLAC__
FLAC__StreamEncoderWriteStatus
flac_stream_encoder_write_callback
(
const
FLAC__StreamEncoder
*
encoder
,
const
FLAC__byte
buffer
[],
unsigned
bytes
,
unsigned
samples
,
unsigned
current_frame
,
void
*
client_data
)
{
EncoderSession
*
encoder_session
=
(
EncoderSession
*
)
client_data
;
const
unsigned
mask
=
(
FLAC__stream_encoder_get_do_exhaustive_model_search
(
encoder
)
||
FLAC__stream_encoder_get_do_qlp_coeff_prec_search
(
encoder
))
?
0x1f
:
0x7f
;
(
void
)
encoder
;
encoder_session
->
bytes_written
+=
bytes
;
encoder_session
->
samples_written
+=
samples
;
if
(
samples
&&
encoder_session
->
verbose
&&
encoder_session
->
total_samples_to_encode
>
0
&&
!
(
current_frame
&
mask
))
if
(
samples
&&
encoder_session
->
verbose
&&
encoder_session
->
total_samples_to_encode
>
0
&&
!
(
current_frame
&
encoder_session
->
stats_
mask
))
print_stats
(
encoder_session
);
if
(
fwrite
(
buffer
,
sizeof
(
FLAC__byte
),
bytes
,
encoder_session
->
fout
)
==
bytes
)
...
...
@@ -1419,23 +1429,22 @@ void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *encoder, c
(
void
)
encoder
,
(
void
)
metadata
,
(
void
)
client_data
;
}
void
flac_file_encoder_progress_callback
(
const
FLAC__FileEncoder
*
encoder
,
FLAC__uint64
bytes_written
,
unsigned
frames_written
,
unsigned
total_frames_estimate
,
void
*
client_data
)
void
flac_file_encoder_progress_callback
(
const
FLAC__FileEncoder
*
encoder
,
FLAC__uint64
bytes_written
,
FLAC__uint64
samples_written
,
unsigned
frames_written
,
unsigned
total_frames_estimate
,
void
*
client_data
)
{
EncoderSession
*
encoder_session
=
(
EncoderSession
*
)
client_data
;
const
unsigned
mask
=
(
FLAC__file_encoder_get_do_exhaustive_model_search
(
encoder
)
||
FLAC__file_encoder_get_do_qlp_coeff_prec_search
(
encoder
))
?
0x1f
:
0x7f
;
(
void
)
total_frames_estimate
;
(
void
)
encoder
,
(
void
)
total_frames_estimate
;
encoder_session
->
bytes_written
=
bytes_written
;
encoder_session
->
samples_written
=
(
FLAC__uint64
)
frames_written
*
(
FLAC__uint64
)
FLAC__file_encoder_get_blocksize
(
encoder
)
;
encoder_session
->
samples_written
=
samples_written
;
if
(
encoder_session
->
verbose
&&
encoder_session
->
total_samples_to_encode
>
0
&&
!
((
frames_written
-
1
)
&
mask
))
if
(
encoder_session
->
verbose
&&
encoder_session
->
total_samples_to_encode
>
0
&&
!
((
frames_written
-
1
)
&
encoder_session
->
stats_
mask
))
print_stats
(
encoder_session
);
}
void
print_stats
(
const
EncoderSession
*
encoder_session
)
{
const
FLAC__uint64
samples_written
=
m
ax
(
encoder_session
->
total_samples_to_encode
,
encoder_session
->
samples_written
);
const
FLAC__uint64
samples_written
=
m
in
(
encoder_session
->
total_samples_to_encode
,
encoder_session
->
samples_written
);
#if defined _MSC_VER || defined __MINGW32__
/* with VC++ you have to spoon feed it the casting */
const
double
progress
=
(
double
)(
FLAC__int64
)
samples_written
/
(
double
)(
FLAC__int64
)
encoder_session
->
total_samples_to_encode
;
...
...
Write
Preview
Supports
Markdown
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