// Copyright 2020 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.
// TODO(https://fxbug.dev/42111692): Move to fuchsia.media.audio

library fuchsia.media;

/// A protocol for monitoring the usage activity of the AudioRenderers and AudioCapturers.
@discoverable
closed protocol ActivityReporter {
    /// Notifies the client whenever there is a change in the set of active AudioRenderUsages.
    /// It returns immediately the first time that it is called.
    strict WatchRenderActivity() -> (struct {
        active_usages vector<AudioRenderUsage>:RENDER_USAGE_COUNT;
    });

    /// Notifies the client whenever there is a change in the set of active AudioCaptureUsages.
    /// It returns immediately the first time that it is called.
    strict WatchCaptureActivity() -> (struct {
        active_usages vector<AudioCaptureUsage>:CAPTURE_USAGE_COUNT;
    });
};
