1 // Copyright 2017 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <audio-proto/audio-proto.h>
6 
7 namespace audio {
8 namespace audio_proto {
9 
10 #define WITH_FLAGS(_str) \
11     ((sample_format & AUDIO_SAMPLE_FORMAT_FLAG_UNSIGNED)        \
12     ? ((sample_format & AUDIO_SAMPLE_FORMAT_FLAG_INVERT_ENDIAN) \
13         ? _str "_UNSIGNED [InvEndian]" : _str "_UNSIGNED")       \
14     : ((sample_format & AUDIO_SAMPLE_FORMAT_FLAG_INVERT_ENDIAN) \
15         ? _str " [InvEndian]" : _str))
16 
SampleFormatToString(SampleFormat sample_format)17 const char* SampleFormatToString(SampleFormat sample_format) {
18     auto fmt = static_cast<SampleFormat>(sample_format & ~AUDIO_SAMPLE_FORMAT_FLAG_MASK);
19     switch (fmt) {
20     case AUDIO_SAMPLE_FORMAT_BITSTREAM:    return WITH_FLAGS("BITSTREAM");
21     case AUDIO_SAMPLE_FORMAT_8BIT:         return WITH_FLAGS("8BIT");
22     case AUDIO_SAMPLE_FORMAT_16BIT:        return WITH_FLAGS("16BIT");
23     case AUDIO_SAMPLE_FORMAT_20BIT_PACKED: return WITH_FLAGS("20BIT_PACKED");
24     case AUDIO_SAMPLE_FORMAT_24BIT_PACKED: return WITH_FLAGS("24BIT_PACKED");
25     case AUDIO_SAMPLE_FORMAT_20BIT_IN32:   return WITH_FLAGS("20BIT_IN32");
26     case AUDIO_SAMPLE_FORMAT_24BIT_IN32:   return WITH_FLAGS("24BIT_IN32");
27     case AUDIO_SAMPLE_FORMAT_32BIT_FLOAT:  return WITH_FLAGS("32BIT_FLOAT");
28     default:                               return WITH_FLAGS("<unknown>");
29     }
30 }
31 #undef WITH_FLAGS
32 
33 }  // namespace audio_proto
34 }  // namespace audio
35