| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/media/audio/audio_core/driver_utils.h" |
| |
| #include <audio-proto-utils/format-utils.h> |
| |
| #include <map> |
| |
| #include "src/lib/fxl/logging.h" |
| |
| namespace media::driver_utils { |
| |
| namespace { |
| static constexpr audio_sample_format_t AUDIO_SAMPLE_FORMAT_UNSIGNED_8BIT = |
| static_cast<audio_sample_format_t>(AUDIO_SAMPLE_FORMAT_8BIT | |
| AUDIO_SAMPLE_FORMAT_FLAG_UNSIGNED); |
| |
| static const std::map<audio_sample_format_t, fuchsia::media::AudioSampleFormat> |
| kDriverSampleFormatToSampleFormatMap = { |
| {AUDIO_SAMPLE_FORMAT_UNSIGNED_8BIT, |
| fuchsia::media::AudioSampleFormat::UNSIGNED_8}, |
| {AUDIO_SAMPLE_FORMAT_16BIT, |
| fuchsia::media::AudioSampleFormat::SIGNED_16}, |
| {AUDIO_SAMPLE_FORMAT_24BIT_IN32, |
| fuchsia::media::AudioSampleFormat::SIGNED_24_IN_32}, |
| {AUDIO_SAMPLE_FORMAT_32BIT_FLOAT, |
| fuchsia::media::AudioSampleFormat::FLOAT}, |
| }; |
| |
| static const std::map<fuchsia::media::AudioSampleFormat, audio_sample_format_t> |
| kSampleFormatToDriverSampleFormatMap = { |
| {fuchsia::media::AudioSampleFormat::UNSIGNED_8, |
| AUDIO_SAMPLE_FORMAT_UNSIGNED_8BIT}, |
| {fuchsia::media::AudioSampleFormat::SIGNED_16, |
| AUDIO_SAMPLE_FORMAT_16BIT}, |
| {fuchsia::media::AudioSampleFormat::SIGNED_24_IN_32, |
| AUDIO_SAMPLE_FORMAT_24BIT_IN32}, |
| {fuchsia::media::AudioSampleFormat::FLOAT, |
| AUDIO_SAMPLE_FORMAT_32BIT_FLOAT}, |
| }; |
| |
| } // namespace |
| |
| bool AudioSampleFormatToDriverSampleFormat( |
| fuchsia::media::AudioSampleFormat sample_format, |
| audio_sample_format_t* driver_sample_format_out) { |
| FXL_DCHECK(driver_sample_format_out != nullptr); |
| |
| auto iter = kSampleFormatToDriverSampleFormatMap.find(sample_format); |
| if (iter == kSampleFormatToDriverSampleFormatMap.end()) { |
| return false; |
| } |
| |
| *driver_sample_format_out = iter->second; |
| return true; |
| } |
| |
| bool DriverSampleFormatToAudioSampleFormat( |
| audio_sample_format_t driver_sample_format, |
| fuchsia::media::AudioSampleFormat* sample_format_out) { |
| auto iter = kDriverSampleFormatToSampleFormatMap.find(driver_sample_format); |
| if (iter == kDriverSampleFormatToSampleFormatMap.end()) { |
| return false; |
| } |
| |
| *sample_format_out = iter->second; |
| return true; |
| } |
| |
| } // namespace media::driver_utils |