// Copyright 2018 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.
library fuchsia.hardware.audiotypes;

type AudioTypesAudioSampleFormat = strict enum : uint32 {
    BITSTREAM = 0x1; // 1 << 0
    EIGHT_BIT = 0x2; // 1 << 1
    SIXTEEN_BIT = 0x4; // 1 << 2
    TWENTY_BIT_PACKED = 0x10; // 1 << 4
    TWENTY_FOUR_BIT_PACKED = 0x20; // 1 << 5
    TWENTY_BIT_IN32 = 0x40; // 1 << 6
    TWENTY_FOUR_BIT_IN32 = 0x80; // 1 << 7
    THIRTY_TWO_BIT = 0x100; // 1 << 8
    THIRTY_TWO_BIT_FLOAT = 0x200; // 1 << 9
    FLAG_UNSIGNED = 0x4000; // 1 << 30
    FLAG_INVERT_ENDIAN = 0x8000; // 1 << 31
    FLAG_MASK = 0xC000; // FLAG_UNSIGNED | FLAG_INVERT_ENDIAN
};

@packed
type AudioTypesAudioStreamFormatRange = struct {
    sample_formats AudioTypesAudioSampleFormat;
    min_frames_per_second uint32;
    max_frames_per_second uint32;
    min_channels uint8;
    max_channels uint8;
    flags uint16;
};
