From 8d87f2b43afbba4bdeb052163cee6b70dba8974d Mon Sep 17 00:00:00 2001 From: Philippe Saint-Pierre Date: Mon, 25 Jun 2012 13:29:22 -0400 Subject: [PATCH] StringForRate() Introduce a function to generate the string representation of a bitrate (kbps, mbps, gbps, etc..) * Factor out the code from MediaPlayer InfoWindow * Allow different bases (/1000 or /1024) --- headers/private/shared/StringForRate.h | 24 ++++++++++ src/apps/mediaplayer/InfoWin.cpp | 11 ++--- src/kits/shared/Jamfile | 1 + src/kits/shared/StringForRate.cpp | 61 ++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 headers/private/shared/StringForRate.h create mode 100644 src/kits/shared/StringForRate.cpp diff --git a/headers/private/shared/StringForRate.h b/headers/private/shared/StringForRate.h new file mode 100644 index 0000000000..bd1a0bd8d7 --- /dev/null +++ b/headers/private/shared/StringForRate.h @@ -0,0 +1,24 @@ +/* + * Copyright 2010 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ +#ifndef STRING_FOR_RATE_H +#define STRING_FOR_RATE_H + +#include + + +namespace BPrivate { + + +const char* string_for_rate(double rate, char* string, size_t stringSize, + double base = 1024.0f); + + +} // namespace BPrivate + + +using BPrivate::string_for_rate; + + +#endif // COLOR_QUANTIZER_H diff --git a/src/apps/mediaplayer/InfoWin.cpp b/src/apps/mediaplayer/InfoWin.cpp index d179add82e..e6508b07fe 100644 --- a/src/apps/mediaplayer/InfoWin.cpp +++ b/src/apps/mediaplayer/InfoWin.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -407,14 +408,10 @@ printf("InfoWin::Update(0x%08lx)\n", which); } if (format.type == B_MEDIA_ENCODED_AUDIO) { float br = format.u.encoded_audio.bit_rate; - if (br > 0.0) { - char rateString[20]; - snprintf(rateString, sizeof(rateString), B_TRANSLATE(", %.0f kbps"), - br / 1000); - s << rateString; - } + char string[20] = ""; + if (br > 0.0) + s << ", " << string_for_rate(br, string, 20, 1000.0); } - s << "\n\n"; fContentsView->Insert(s.String()); } diff --git a/src/kits/shared/Jamfile b/src/kits/shared/Jamfile index 109df80924..d56a8b6fe2 100644 --- a/src/kits/shared/Jamfile +++ b/src/kits/shared/Jamfile @@ -29,6 +29,7 @@ StaticLibrary libshared.a : RWLockManager.cpp SHA256.cpp ShakeTrackingFilter.cpp + StringForRate.cpp StringForSize.cpp Variant.cpp ; diff --git a/src/kits/shared/StringForRate.cpp b/src/kits/shared/StringForRate.cpp new file mode 100644 index 0000000000..4f0c163526 --- /dev/null +++ b/src/kits/shared/StringForRate.cpp @@ -0,0 +1,61 @@ +/* + * Copyright 2012 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ + +#include "StringForRate.h" + +#include + +#include + +using BPrivate::gSystemCatalog; + + +#undef B_TRANSLATION_CONTEXT +#define B_TRANSLATION_CONTEXT "StringForRate" + + +namespace BPrivate { + + +const char* +string_for_rate(double rate, char* string, size_t stringSize, double base) +{ + double kbps = rate / base; + if (kbps < 1.0) { + const char* trKey = B_TRANSLATE_MARK("%.0f bps"); + snprintf(string, stringSize, gSystemCatalog.GetString(trKey, + B_TRANSLATION_CONTEXT), (int)rate); + return string; + } + double mbps = kbps / base; + if (mbps < 1.0) { + const char* trKey = B_TRANSLATE_MARK("%.0f kbps"); + snprintf(string, stringSize, gSystemCatalog.GetString(trKey, + B_TRANSLATION_CONTEXT), kbps); + return string; + } + double gbps = mbps / base; + if (gbps < 1.0) { + const char* trKey = B_TRANSLATE_MARK("%.0f mbps"); + snprintf(string, stringSize, gSystemCatalog.GetString(trKey, + B_TRANSLATION_CONTEXT), mbps); + return string; + } + double tbps = gbps / base; + if (tbps < 1.0) { + const char* trKey = B_TRANSLATE_MARK("%.0f gbps"); + snprintf(string, stringSize, gSystemCatalog.GetString(trKey, + B_TRANSLATION_CONTEXT), gbps); + return string; + } + const char* trKey = B_TRANSLATE_MARK("%.0f tbps"); + snprintf(string, stringSize, gSystemCatalog.GetString(trKey, + B_TRANSLATION_CONTEXT), tbps); + return string; +} + + +} // namespace BPrivate +