diff options
author | Ganesh Ajjanagadde <gajjanagadde@gmail.com> | 2015-12-23 09:49:00 -0800 |
---|---|---|
committer | Ganesh Ajjanagadde <gajjanagadde@gmail.com> | 2015-12-29 08:59:16 -0800 |
commit | 4a44bc5588944cb8a81e0896bc97643e0c894989 (patch) | |
tree | 303125380daeddce22601d58bd119621d94dc76f /ffprobe.c | |
parent | e5c16e38fe15a40b2d38bd7ab83e1243012a2077 (diff) | |
download | ffmpeg-4a44bc5588944cb8a81e0896bc97643e0c894989.tar.gz |
ffprobe: avoid unnecessary pow and exp2 calls
These are just for prefixes and may be hardcoded easily; see lavu/eval
for this approach.
Reviewed-by: Stefano Sabatini <stefasab@gmail.com>
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde@gmail.com>
Diffstat (limited to 'ffprobe.c')
-rw-r--r-- | ffprobe.c | 27 |
1 files changed, 19 insertions, 8 deletions
@@ -218,8 +218,19 @@ static AVInputFormat *iformat = NULL; static struct AVHashContext *hash; -static const char *const binary_unit_prefixes [] = { "", "Ki", "Mi", "Gi", "Ti", "Pi" }; -static const char *const decimal_unit_prefixes[] = { "", "K" , "M" , "G" , "T" , "P" }; +static const struct { + double bin_val; + double dec_val; + const char *bin_str; + const char *dec_str; +} si_prefixes[] = { + { 1.0, 1.0, "", "" }, + { 1.024e3, 1e3, "Ki", "K" }, + { 1.048576e6, 1e6, "Mi", "M" }, + { 1.073741824e9, 1e9, "Gi", "G" }, + { 1.099511627776e12, 1e12, "Ti", "T" }, + { 1.125899906842624e15, 1e15, "Pi", "P" }, +}; static const char unit_second_str[] = "s" ; static const char unit_hertz_str[] = "Hz" ; @@ -273,14 +284,14 @@ static char *value_string(char *buf, int buf_size, struct unit_value uv) if (uv.unit == unit_byte_str && use_byte_value_binary_prefix) { index = (long long int) (log2(vald)) / 10; - index = av_clip(index, 0, FF_ARRAY_ELEMS(binary_unit_prefixes) - 1); - vald /= exp2(index * 10); - prefix_string = binary_unit_prefixes[index]; + index = av_clip(index, 0, FF_ARRAY_ELEMS(si_prefixes) - 1); + vald /= si_prefixes[index].bin_val; + prefix_string = si_prefixes[index].bin_str; } else { index = (long long int) (log10(vald)) / 3; - index = av_clip(index, 0, FF_ARRAY_ELEMS(decimal_unit_prefixes) - 1); - vald /= pow(10, index * 3); - prefix_string = decimal_unit_prefixes[index]; + index = av_clip(index, 0, FF_ARRAY_ELEMS(si_prefixes) - 1); + vald /= si_prefixes[index].dec_val; + prefix_string = si_prefixes[index].dec_str; } vali = vald; } |