aboutsummaryrefslogtreecommitdiff
path: root/cast
diff options
context:
space:
mode:
authorJordan Bayles <jophba@chromium.org>2020-11-19 15:23:59 -0800
committerCommit Bot <commit-bot@chromium.org>2020-11-24 00:29:47 +0000
commitb5ac6d34a14cc938258a938ebe3604a93776f7fa (patch)
treed1639452d029c93f6c6a233a0d3b7509190b199d /cast
parenta63f1abf172a55dde56701209770e1deb3fc52b1 (diff)
downloadopenscreen-b5ac6d34a14cc938258a938ebe3604a93776f7fa.tar.gz
Add new enum name table
Add a new using statement and simple helper methods for storing enum names as strings. Doing this instead of porting Chrome's EnumTable class. Bug: crbug.com/openscreen/111 Change-Id: Ib92be8d1837782fd28398e96e3e3a50674d4a07f Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/2545125 Reviewed-by: Ryan Keane <rwkeane@google.com> Commit-Queue: Jordan Bayles <jophba@chromium.org>
Diffstat (limited to 'cast')
-rw-r--r--cast/streaming/message_fields.cc48
1 files changed, 15 insertions, 33 deletions
diff --git a/cast/streaming/message_fields.cc b/cast/streaming/message_fields.cc
index d5528519..966fb5bb 100644
--- a/cast/streaming/message_fields.cc
+++ b/cast/streaming/message_fields.cc
@@ -7,64 +7,46 @@
#include <array>
#include <utility>
+#include "util/enum_name_table.h"
#include "util/osp_logging.h"
namespace openscreen {
namespace cast {
namespace {
-constexpr std::array<std::pair<const char*, AudioCodec>, 2> kAudioCodecNames{
+constexpr EnumNameTable<AudioCodec, 2> kAudioCodecNames{
{{"aac", AudioCodec::kAac}, {"opus", AudioCodec::kOpus}}};
-constexpr std::array<std::pair<const char*, VideoCodec>, 4> kVideoCodecNames{
+constexpr EnumNameTable<VideoCodec, 4> kVideoCodecNames{
{{"h264", VideoCodec::kH264},
{"vp8", VideoCodec::kVp8},
{"hevc", VideoCodec::kHevc},
{"vp9", VideoCodec::kVp9}}};
-constexpr char kUnknownCodecError[] = "Codec not accounted for in name array.";
-
-template <typename T, size_t size>
-const char* GetCodecName(
- const std::array<std::pair<const char*, T>, size>& codecs,
- T codec) {
- for (auto pair : codecs) {
- if (pair.second == codec) {
- return pair.first;
- }
- }
- OSP_NOTREACHED() << kUnknownCodecError;
- return {};
-}
-
-template <typename T, size_t size>
-T GetCodec(const std::array<std::pair<const char*, T>, size>& codecs,
- absl::string_view name) {
- for (auto pair : codecs) {
- if (pair.first == name) {
- return pair.second;
- }
- }
- OSP_NOTREACHED() << kUnknownCodecError;
- return {};
-}
-
} // namespace
const char* CodecToString(AudioCodec codec) {
- return GetCodecName(kAudioCodecNames, codec);
+ ErrorOr<const char*> name = GetEnumName(kAudioCodecNames, codec);
+ OSP_DCHECK(name.is_value());
+ return name.value();
}
AudioCodec StringToAudioCodec(absl::string_view name) {
- return GetCodec(kAudioCodecNames, name);
+ ErrorOr<AudioCodec> enum_ = GetEnum(kAudioCodecNames, name);
+ OSP_DCHECK(enum_.is_value());
+ return enum_.value();
}
const char* CodecToString(VideoCodec codec) {
- return GetCodecName(kVideoCodecNames, codec);
+ ErrorOr<const char*> name = GetEnumName(kVideoCodecNames, codec);
+ OSP_DCHECK(name.is_value());
+ return name.value();
}
VideoCodec StringToVideoCodec(absl::string_view name) {
- return GetCodec(kVideoCodecNames, name);
+ ErrorOr<VideoCodec> enum_ = GetEnum(kVideoCodecNames, name);
+ OSP_DCHECK(enum_.is_value());
+ return enum_.value();
}
} // namespace cast