|
Packit |
47f805 |
/*
|
|
Packit |
47f805 |
* time status related function source file
|
|
Packit |
47f805 |
*
|
|
Packit |
47f805 |
* Copyright (c) 1999 Mark Taylor
|
|
Packit |
47f805 |
* 2010 Robert Hegemann
|
|
Packit |
47f805 |
*
|
|
Packit |
47f805 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
47f805 |
* modify it under the terms of the GNU Library General Public
|
|
Packit |
47f805 |
* License as published by the Free Software Foundation; either
|
|
Packit |
47f805 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit |
47f805 |
*
|
|
Packit |
47f805 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
47f805 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
47f805 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
47f805 |
* Library General Public License for more details.
|
|
Packit |
47f805 |
*
|
|
Packit |
47f805 |
* You should have received a copy of the GNU Library General Public
|
|
Packit |
47f805 |
* License along with this library; if not, write to the
|
|
Packit |
47f805 |
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Packit |
47f805 |
* Boston, MA 02111-1307, USA.
|
|
Packit |
47f805 |
*/
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
/* $Id: timestatus.c,v 1.61 2013/03/20 20:38:43 robert Exp $ */
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
47f805 |
# include <config.h>
|
|
Packit |
47f805 |
#endif
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
#if 1
|
|
Packit |
47f805 |
# define SPEED_CHAR "x" /* character x */
|
|
Packit |
47f805 |
# define SPEED_MULT 1.
|
|
Packit |
47f805 |
#else
|
|
Packit |
47f805 |
# define SPEED_CHAR "%%"
|
|
Packit |
47f805 |
# define SPEED_MULT 100.
|
|
Packit |
47f805 |
#endif
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
#include <assert.h>
|
|
Packit |
47f805 |
#include <time.h>
|
|
Packit |
47f805 |
#include <string.h>
|
|
Packit |
47f805 |
#include <stdlib.h>
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
#include "lame.h"
|
|
Packit |
47f805 |
#include "main.h"
|
|
Packit |
47f805 |
#include "lametime.h"
|
|
Packit |
47f805 |
#include "timestatus.h"
|
|
Packit |
47f805 |
#include "brhist.h"
|
|
Packit |
47f805 |
#include "console.h"
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
#ifdef WITH_DMALLOC
|
|
Packit |
47f805 |
#include <dmalloc.h>
|
|
Packit |
47f805 |
#endif
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
typedef struct time_status_struct {
|
|
Packit |
47f805 |
double last_time; /* result of last call to clock */
|
|
Packit |
47f805 |
double elapsed_time; /* total time */
|
|
Packit |
47f805 |
double estimated_time; /* estimated total duration time [s] */
|
|
Packit |
47f805 |
double speed_index; /* speed relative to realtime coding [100%] */
|
|
Packit |
47f805 |
} timestatus_t;
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static struct EncoderProgress {
|
|
Packit |
47f805 |
timestatus_t real_time;
|
|
Packit |
47f805 |
timestatus_t proc_time;
|
|
Packit |
47f805 |
double last_time;
|
|
Packit |
47f805 |
int last_frame_num;
|
|
Packit |
47f805 |
int time_status_init;
|
|
Packit |
47f805 |
} global_encoder_progress;
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
/*
|
|
Packit |
47f805 |
* Calculates from the input (see below) the following values:
|
|
Packit |
47f805 |
* - total estimated time
|
|
Packit |
47f805 |
* - a speed index
|
|
Packit |
47f805 |
*/
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static void
|
|
Packit |
47f805 |
ts_calc_times(timestatus_t * const tstime, /* tstime->elapsed_time: elapsed time */
|
|
Packit |
47f805 |
const int sample_freq, /* sample frequency [Hz/kHz] */
|
|
Packit |
47f805 |
const int frameNum, /* Number of the current Frame */
|
|
Packit |
47f805 |
const int totalframes, /* total umber of Frames */
|
|
Packit |
47f805 |
const int framesize)
|
|
Packit |
47f805 |
{ /* Size of a frame [bps/kbps] */
|
|
Packit |
47f805 |
assert(sample_freq >= 8000 && sample_freq <= 48000);
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
if (frameNum > 0 && tstime->elapsed_time > 0) {
|
|
Packit |
47f805 |
tstime->estimated_time = tstime->elapsed_time * totalframes / frameNum;
|
|
Packit |
47f805 |
tstime->speed_index = framesize * frameNum / (sample_freq * tstime->elapsed_time);
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
else {
|
|
Packit |
47f805 |
tstime->estimated_time = 0.;
|
|
Packit |
47f805 |
tstime->speed_index = 0.;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
/* Decomposes a given number of seconds into a easy to read hh:mm:ss format
|
|
Packit |
47f805 |
* padded with an additional character
|
|
Packit |
47f805 |
*/
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static void
|
|
Packit |
47f805 |
ts_time_decompose(const double x, const char padded_char)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
const unsigned long time_in_sec = (unsigned long)x;
|
|
Packit |
47f805 |
const unsigned long hour = time_in_sec / 3600;
|
|
Packit |
47f805 |
const unsigned int min = time_in_sec / 60 % 60;
|
|
Packit |
47f805 |
const unsigned int sec = time_in_sec % 60;
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
if (hour == 0)
|
|
Packit |
47f805 |
console_printf(" %2u:%02u%c", min, sec, padded_char);
|
|
Packit |
47f805 |
else if (hour < 100)
|
|
Packit |
47f805 |
console_printf("%2lu:%02u:%02u%c", hour, min, sec, padded_char);
|
|
Packit |
47f805 |
else
|
|
Packit |
47f805 |
console_printf("%6lu h%c", hour, padded_char);
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static void
|
|
Packit |
47f805 |
timestatus(const lame_global_flags * const gfp)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
timestatus_t* real_time = &global_encoder_progress.real_time;
|
|
Packit |
47f805 |
timestatus_t* proc_time = &global_encoder_progress.proc_time;
|
|
Packit |
47f805 |
int percent;
|
|
Packit |
47f805 |
double tmx, delta;
|
|
Packit |
47f805 |
int samp_rate = lame_get_out_samplerate(gfp)
|
|
Packit |
47f805 |
, frameNum = lame_get_frameNum(gfp)
|
|
Packit |
47f805 |
, totalframes = lame_get_totalframes(gfp)
|
|
Packit |
47f805 |
, framesize = lame_get_framesize(gfp)
|
|
Packit |
47f805 |
;
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
if (totalframes < frameNum) {
|
|
Packit |
47f805 |
totalframes = frameNum;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
if (global_encoder_progress.time_status_init == 0) {
|
|
Packit |
47f805 |
real_time->last_time = GetRealTime();
|
|
Packit |
47f805 |
proc_time->last_time = GetCPUTime();
|
|
Packit |
47f805 |
real_time->elapsed_time = 0;
|
|
Packit |
47f805 |
proc_time->elapsed_time = 0;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
/* we need rollover protection for GetCPUTime, and maybe GetRealTime(): */
|
|
Packit |
47f805 |
tmx = GetRealTime();
|
|
Packit |
47f805 |
delta = tmx - real_time->last_time;
|
|
Packit |
47f805 |
if (delta < 0)
|
|
Packit |
47f805 |
delta = 0; /* ignore, clock has rolled over */
|
|
Packit |
47f805 |
real_time->elapsed_time += delta;
|
|
Packit |
47f805 |
real_time->last_time = tmx;
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
tmx = GetCPUTime();
|
|
Packit |
47f805 |
delta = tmx - proc_time->last_time;
|
|
Packit |
47f805 |
if (delta < 0)
|
|
Packit |
47f805 |
delta = 0; /* ignore, clock has rolled over */
|
|
Packit |
47f805 |
proc_time->elapsed_time += delta;
|
|
Packit |
47f805 |
proc_time->last_time = tmx;
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
if (global_encoder_progress.time_status_init == 0) {
|
|
Packit |
47f805 |
console_printf("\r"
|
|
Packit |
47f805 |
" Frame | CPU time/estim | REAL time/estim | play/CPU | ETA \n"
|
|
Packit |
47f805 |
" 0/ ( 0%%)| 0:00/ : | 0:00/ : | "
|
|
Packit |
47f805 |
SPEED_CHAR "| : \r"
|
|
Packit |
47f805 |
/* , Console_IO.str_clreoln, Console_IO.str_clreoln */ );
|
|
Packit |
47f805 |
global_encoder_progress.time_status_init = 1;
|
|
Packit |
47f805 |
return;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
ts_calc_times(real_time, samp_rate, frameNum, totalframes, framesize);
|
|
Packit |
47f805 |
ts_calc_times(proc_time, samp_rate, frameNum, totalframes, framesize);
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
if (frameNum < totalframes) {
|
|
Packit |
47f805 |
percent = (int) (100. * frameNum / totalframes + 0.5);
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
else {
|
|
Packit |
47f805 |
percent = 100;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
console_printf("\r%6i/%-6i", frameNum, totalframes);
|
|
Packit |
47f805 |
console_printf(percent < 100 ? " (%2d%%)|" : "(%3.3d%%)|", percent);
|
|
Packit |
47f805 |
ts_time_decompose(proc_time->elapsed_time, '/');
|
|
Packit |
47f805 |
ts_time_decompose(proc_time->estimated_time, '|');
|
|
Packit |
47f805 |
ts_time_decompose(real_time->elapsed_time, '/');
|
|
Packit |
47f805 |
ts_time_decompose(real_time->estimated_time, '|');
|
|
Packit |
47f805 |
console_printf(proc_time->speed_index <= 1. ?
|
|
Packit |
47f805 |
"%9.4f" SPEED_CHAR "|" : "%#9.5g" SPEED_CHAR "|",
|
|
Packit |
47f805 |
SPEED_MULT * proc_time->speed_index);
|
|
Packit |
47f805 |
ts_time_decompose((real_time->estimated_time - real_time->elapsed_time), ' ');
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static void
|
|
Packit |
47f805 |
timestatus_finish(void)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
console_printf("\n");
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static void
|
|
Packit |
47f805 |
brhist_init_package(lame_global_flags const* gf)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
if (global_ui_config.brhist) {
|
|
Packit |
47f805 |
if (brhist_init(gf, lame_get_VBR_min_bitrate_kbps(gf), lame_get_VBR_max_bitrate_kbps(gf))) {
|
|
Packit |
47f805 |
/* fail to initialize */
|
|
Packit |
47f805 |
global_ui_config.brhist = 0;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
else {
|
|
Packit |
47f805 |
brhist_init(gf, 128, 128); /* Dirty hack */
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
void
|
|
Packit |
47f805 |
encoder_progress_begin( lame_global_flags const* gf
|
|
Packit |
47f805 |
, char const* inPath
|
|
Packit |
47f805 |
, char const* outPath
|
|
Packit |
47f805 |
)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
brhist_init_package(gf);
|
|
Packit |
47f805 |
global_encoder_progress.time_status_init = 0;
|
|
Packit |
47f805 |
global_encoder_progress.last_time = 0;
|
|
Packit |
47f805 |
global_encoder_progress.last_frame_num = 0;
|
|
Packit |
47f805 |
if (global_ui_config.silent < 9) {
|
|
Packit |
47f805 |
char* i_file = 0;
|
|
Packit |
47f805 |
char* o_file = 0;
|
|
Packit |
47f805 |
#if defined( _WIN32 ) && !defined(__MINGW32__)
|
|
Packit |
47f805 |
inPath = i_file = utf8ToConsole8Bit(inPath);
|
|
Packit |
47f805 |
outPath = o_file = utf8ToConsole8Bit(outPath);
|
|
Packit |
47f805 |
#endif
|
|
Packit |
47f805 |
lame_print_config(gf); /* print useful information about options being used */
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
console_printf("Encoding %s%s to %s\n",
|
|
Packit |
47f805 |
strcmp(inPath, "-") ? inPath : "<stdin>",
|
|
Packit |
47f805 |
strlen(inPath) + strlen(outPath) < 66 ? "" : "\n ",
|
|
Packit |
47f805 |
strcmp(outPath, "-") ? outPath : "<stdout>");
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
free(i_file);
|
|
Packit |
47f805 |
free(o_file);
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
console_printf("Encoding as %g kHz ", 1.e-3 * lame_get_out_samplerate(gf));
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
static const char *mode_names[2][4] = {
|
|
Packit |
47f805 |
{"stereo", "j-stereo", "dual-ch", "single-ch"},
|
|
Packit |
47f805 |
{"stereo", "force-ms", "dual-ch", "single-ch"}
|
|
Packit |
47f805 |
};
|
|
Packit |
47f805 |
switch (lame_get_VBR(gf)) {
|
|
Packit |
47f805 |
case vbr_rh:
|
|
Packit |
47f805 |
console_printf("%s MPEG-%u%s Layer III VBR(q=%g) qval=%i\n",
|
|
Packit |
47f805 |
mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)],
|
|
Packit |
47f805 |
2 - lame_get_version(gf),
|
|
Packit |
47f805 |
lame_get_out_samplerate(gf) < 16000 ? ".5" : "",
|
|
Packit |
47f805 |
lame_get_VBR_quality(gf),
|
|
Packit |
47f805 |
lame_get_quality(gf));
|
|
Packit |
47f805 |
break;
|
|
Packit |
47f805 |
case vbr_mt:
|
|
Packit |
47f805 |
case vbr_mtrh:
|
|
Packit |
47f805 |
console_printf("%s MPEG-%u%s Layer III VBR(q=%g)\n",
|
|
Packit |
47f805 |
mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)],
|
|
Packit |
47f805 |
2 - lame_get_version(gf),
|
|
Packit |
47f805 |
lame_get_out_samplerate(gf) < 16000 ? ".5" : "",
|
|
Packit |
47f805 |
lame_get_VBR_quality(gf));
|
|
Packit |
47f805 |
break;
|
|
Packit |
47f805 |
case vbr_abr:
|
|
Packit |
47f805 |
console_printf("%s MPEG-%u%s Layer III (%gx) average %d kbps qval=%i\n",
|
|
Packit |
47f805 |
mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)],
|
|
Packit |
47f805 |
2 - lame_get_version(gf),
|
|
Packit |
47f805 |
lame_get_out_samplerate(gf) < 16000 ? ".5" : "",
|
|
Packit |
47f805 |
0.1 * (int) (10. * lame_get_compression_ratio(gf) + 0.5),
|
|
Packit |
47f805 |
lame_get_VBR_mean_bitrate_kbps(gf),
|
|
Packit |
47f805 |
lame_get_quality(gf));
|
|
Packit |
47f805 |
break;
|
|
Packit |
47f805 |
default:
|
|
Packit |
47f805 |
console_printf("%s MPEG-%u%s Layer III (%gx) %3d kbps qval=%i\n",
|
|
Packit |
47f805 |
mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)],
|
|
Packit |
47f805 |
2 - lame_get_version(gf),
|
|
Packit |
47f805 |
lame_get_out_samplerate(gf) < 16000 ? ".5" : "",
|
|
Packit |
47f805 |
0.1 * (int) (10. * lame_get_compression_ratio(gf) + 0.5),
|
|
Packit |
47f805 |
lame_get_brate(gf),
|
|
Packit |
47f805 |
lame_get_quality(gf));
|
|
Packit |
47f805 |
break;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
if (global_ui_config.silent <= -10) {
|
|
Packit |
47f805 |
lame_print_internals(gf);
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
void
|
|
Packit |
47f805 |
encoder_progress( lame_global_flags const* gf )
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
if (global_ui_config.silent <= 0) {
|
|
Packit |
47f805 |
int const frames = lame_get_frameNum(gf);
|
|
Packit |
47f805 |
int const frames_diff = frames - global_encoder_progress.last_frame_num;
|
|
Packit |
47f805 |
if (global_ui_config.update_interval <= 0) { /* most likely --disptime x not used */
|
|
Packit |
47f805 |
if (frames_diff < 100 && frames_diff != 0) { /* true, most of the time */
|
|
Packit |
47f805 |
return;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
global_encoder_progress.last_frame_num = (frames/100)*100;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
else {
|
|
Packit |
47f805 |
if (frames != 0 && frames != 9) {
|
|
Packit |
47f805 |
double const act = GetRealTime();
|
|
Packit |
47f805 |
double const dif = act - global_encoder_progress.last_time;
|
|
Packit |
47f805 |
if (dif >= 0 && dif < global_ui_config.update_interval) {
|
|
Packit |
47f805 |
return;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
global_encoder_progress.last_time = GetRealTime(); /* from now! disp_time seconds */
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
if (global_ui_config.brhist) {
|
|
Packit |
47f805 |
brhist_jump_back();
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
timestatus(gf);
|
|
Packit |
47f805 |
if (global_ui_config.brhist) {
|
|
Packit |
47f805 |
brhist_disp(gf);
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
console_flush();
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
void
|
|
Packit |
47f805 |
encoder_progress_end( lame_global_flags const* gf )
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
if (global_ui_config.silent <= 0) {
|
|
Packit |
47f805 |
if (global_ui_config.brhist) {
|
|
Packit |
47f805 |
brhist_jump_back();
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
timestatus(gf);
|
|
Packit |
47f805 |
if (global_ui_config.brhist) {
|
|
Packit |
47f805 |
brhist_disp(gf);
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
timestatus_finish();
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
/* these functions are used in get_audio.c */
|
|
Packit |
47f805 |
static struct DecoderProgress {
|
|
Packit |
47f805 |
int last_mode_ext;
|
|
Packit |
47f805 |
int frames_total;
|
|
Packit |
47f805 |
int frame_ctr;
|
|
Packit |
47f805 |
int framesize;
|
|
Packit |
47f805 |
unsigned long samples;
|
|
Packit |
47f805 |
} global_decoder_progress;
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static
|
|
Packit |
47f805 |
unsigned long calcEndPadding(unsigned long samples, int pcm_samples_per_frame)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
unsigned long end_padding;
|
|
Packit |
47f805 |
samples += 576;
|
|
Packit |
47f805 |
end_padding = pcm_samples_per_frame - (samples % pcm_samples_per_frame);
|
|
Packit |
47f805 |
if (end_padding < 576)
|
|
Packit |
47f805 |
end_padding += pcm_samples_per_frame;
|
|
Packit |
47f805 |
return end_padding;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static
|
|
Packit |
47f805 |
unsigned long calcNumBlocks(unsigned long samples, int pcm_samples_per_frame)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
unsigned long end_padding;
|
|
Packit |
47f805 |
samples += 576;
|
|
Packit |
47f805 |
end_padding = pcm_samples_per_frame - (samples % pcm_samples_per_frame);
|
|
Packit |
47f805 |
if (end_padding < 576)
|
|
Packit |
47f805 |
end_padding += pcm_samples_per_frame;
|
|
Packit |
47f805 |
return (samples + end_padding) / pcm_samples_per_frame;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
DecoderProgress
|
|
Packit |
47f805 |
decoder_progress_init(unsigned long n, int framesize)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
DecoderProgress dp = &global_decoder_progress;
|
|
Packit |
47f805 |
dp->last_mode_ext =0;
|
|
Packit |
47f805 |
dp->frames_total = 0;
|
|
Packit |
47f805 |
dp->frame_ctr = 0;
|
|
Packit |
47f805 |
dp->framesize = framesize;
|
|
Packit |
47f805 |
dp->samples = 0;
|
|
Packit |
47f805 |
if (n != (0ul-1ul)) {
|
|
Packit |
47f805 |
if (framesize == 576 || framesize == 1152) {
|
|
Packit |
47f805 |
dp->frames_total = calcNumBlocks(n, framesize);
|
|
Packit |
47f805 |
dp->samples = 576 + calcEndPadding(n, framesize);
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
else if (framesize > 0) {
|
|
Packit |
47f805 |
dp->frames_total = n / framesize;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
else {
|
|
Packit |
47f805 |
dp->frames_total = n;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
return dp;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
static void
|
|
Packit |
47f805 |
addSamples(DecoderProgress dp, int iread)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
dp->samples += iread;
|
|
Packit |
47f805 |
dp->frame_ctr += dp->samples / dp->framesize;
|
|
Packit |
47f805 |
dp->samples %= dp->framesize;
|
|
Packit |
47f805 |
if (dp->frames_total < dp->frame_ctr) {
|
|
Packit |
47f805 |
dp->frames_total = dp->frame_ctr;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
void
|
|
Packit |
47f805 |
decoder_progress(DecoderProgress dp, const mp3data_struct * mp3data, int iread)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
addSamples(dp, iread);
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
console_printf("\rFrame#%6i/%-6i %3i kbps",
|
|
Packit |
47f805 |
dp->frame_ctr, dp->frames_total, mp3data->bitrate);
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
/* Programmed with a single frame hold delay */
|
|
Packit |
47f805 |
/* Attention: static data */
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
/* MP2 Playback is still buggy. */
|
|
Packit |
47f805 |
/* "'00' subbands 4-31 in intensity_stereo, bound==4" */
|
|
Packit |
47f805 |
/* is this really intensity_stereo or is it MS stereo? */
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
if (mp3data->mode == JOINT_STEREO) {
|
|
Packit |
47f805 |
int curr = mp3data->mode_ext;
|
|
Packit |
47f805 |
int last = dp->last_mode_ext;
|
|
Packit |
47f805 |
console_printf(" %s %c",
|
|
Packit |
47f805 |
curr & 2 ? last & 2 ? " MS " : "LMSR" : last & 2 ? "LMSR" : "L R",
|
|
Packit |
47f805 |
curr & 1 ? last & 1 ? 'I' : 'i' : last & 1 ? 'i' : ' ');
|
|
Packit |
47f805 |
dp->last_mode_ext = curr;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
else {
|
|
Packit |
47f805 |
console_printf(" ");
|
|
Packit |
47f805 |
dp->last_mode_ext = 0;
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
/* console_printf ("%s", Console_IO.str_clreoln ); */
|
|
Packit |
47f805 |
console_printf(" \b\b\b\b\b\b\b\b");
|
|
Packit |
47f805 |
console_flush();
|
|
Packit |
47f805 |
}
|
|
Packit |
47f805 |
|
|
Packit |
47f805 |
void
|
|
Packit |
47f805 |
decoder_progress_finish(DecoderProgress dp)
|
|
Packit |
47f805 |
{
|
|
Packit |
47f805 |
(void) dp;
|
|
Packit |
47f805 |
console_printf("\n");
|
|
Packit |
47f805 |
}
|