/*
 * Copyright (c) 2023 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ohos.hdi.distributed_audio.audio.v1_0;

import ohos.hdi.distributed_audio.audio.v1_0.AudioTypes;

/**
 * @brief Provides capabilities for audio capturing, including controlling the capturing, setting audio attributes,
 * scenes, and volume, and capturing audio frames.
 * @since 4.1
 * @version 1.0
 */
interface IAudioCapture {
    CaptureFrame([out] byte[] frame, [out] unsigned long replyBytes);
    GetCapturePosition([out] unsigned long frames, [out] struct AudioTimeStamp time);
    CheckSceneCapability([in] struct AudioSceneDescriptor scene, [out] boolean supported);
    SelectScene([in] struct AudioSceneDescriptor scene);
    SetMute([in] boolean mute);
    GetMute([out] boolean mute);
    SetVolume([in] float volume);
    GetVolume([out] float volume);
    GetGainThreshold([out] float min, [out] float max);
    GetGain([out] float gain);
    SetGain([in] float gain);
    GetFrameSize([out] unsigned long size);
    GetFrameCount([out] unsigned long count);
    SetSampleAttributes([in] struct AudioSampleAttributes attrs);
    GetSampleAttributes([out] struct AudioSampleAttributes attrs);
    GetCurrentChannelId([out] unsigned int channelId);
    SetExtraParams([in] String keyValueList);
    GetExtraParams([out] String keyValueList);
    ReqMmapBuffer([in] int reqSize, [out] struct AudioMmapBufferDescriptor desc);
    GetMmapPosition([out] unsigned long frames, [out] struct AudioTimeStamp time);
    AddAudioEffect([in] unsigned long effectid);
    RemoveAudioEffect([in] unsigned long effectid);
    GetFrameBufferSize([out] unsigned long bufferSize);
    Start();
    Stop();
    Pause();
    Resume();
    Flush();
    TurnStandbyMode();
    AudioDevDump([in] int range, [in] int fd);
    IsSupportsPauseAndResume([out] boolean supportPause, [out] boolean supportResume);
}