// 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.

#ifndef SRC_MEDIA_AUDIO_AUDIO_CORE_DRIVER_UTILS_H_
#define SRC_MEDIA_AUDIO_AUDIO_CORE_DRIVER_UTILS_H_

#include <fuchsia/media/cpp/fidl.h>
#include <zircon/device/audio.h>

namespace media::driver_utils {

// Convert an AudioSampleFormat into an audio stream driver sample_format.
// Returns true if the conversion succeed, or false if it does not.
bool AudioSampleFormatToDriverSampleFormat(fuchsia::media::AudioSampleFormat sample_format,
                                           audio_sample_format_t* driver_sample_format_out);

// Convert an audio stream driver sample_format into an AudioSampleFormat.
// Returns true if the conversion succeed, or false if it does not.
bool DriverSampleFormatToAudioSampleFormat(audio_sample_format_t driver_sample_format,
                                           fuchsia::media::AudioSampleFormat* sample_format_out);

}  // namespace media::driver_utils

#endif  // SRC_MEDIA_AUDIO_AUDIO_CORE_DRIVER_UTILS_H_
