1d5a2a63bSopenharmony_ci/*
2d5a2a63bSopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3d5a2a63bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d5a2a63bSopenharmony_ci * you may not use this file except in compliance with the License.
5d5a2a63bSopenharmony_ci * You may obtain a copy of the License at
6d5a2a63bSopenharmony_ci *
7d5a2a63bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d5a2a63bSopenharmony_ci *
9d5a2a63bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d5a2a63bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d5a2a63bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d5a2a63bSopenharmony_ci * See the License for the specific language governing permissions and
13d5a2a63bSopenharmony_ci * limitations under the License.
14d5a2a63bSopenharmony_ci */
15d5a2a63bSopenharmony_ci
16d5a2a63bSopenharmony_ci#ifndef FRAMEWORKS_AUDIO_CAPTURER_IMPL_H
17d5a2a63bSopenharmony_ci#define FRAMEWORKS_AUDIO_CAPTURER_IMPL_H
18d5a2a63bSopenharmony_ci
19d5a2a63bSopenharmony_ci#include <mutex>
20d5a2a63bSopenharmony_ci#include <sys/time.h>
21d5a2a63bSopenharmony_ci
22d5a2a63bSopenharmony_ci#include "audio_capturer.h"
23d5a2a63bSopenharmony_ci
24d5a2a63bSopenharmony_cinamespace OHOS {
25d5a2a63bSopenharmony_cinamespace Audio {
26d5a2a63bSopenharmony_cienum AudioChannel {
27d5a2a63bSopenharmony_ci    AUDIO_CHANNEL_IN_MONO   = 1, /* mono */
28d5a2a63bSopenharmony_ci    AUDIO_CHANNEL_IN_STEREO = 2, /* stereo */
29d5a2a63bSopenharmony_ci    AUDIO_CHANNEL_BUTT
30d5a2a63bSopenharmony_ci};
31d5a2a63bSopenharmony_ci
32d5a2a63bSopenharmony_ciclass AudioSource;
33d5a2a63bSopenharmony_ciclass AudioEncoder;
34d5a2a63bSopenharmony_ciclass AudioCapturerImpl {
35d5a2a63bSopenharmony_cipublic:
36d5a2a63bSopenharmony_ci    AudioCapturerImpl();
37d5a2a63bSopenharmony_ci    virtual ~AudioCapturerImpl();
38d5a2a63bSopenharmony_ci    static bool GetMinFrameCount(int32_t sampleRate, int32_t channelCount, AudioCodecFormat audioFormat,
39d5a2a63bSopenharmony_ci                                 size_t &frameCount);
40d5a2a63bSopenharmony_ci    int32_t SetCapturerInfo(const AudioCapturerInfo info);
41d5a2a63bSopenharmony_ci    int32_t GetCapturerInfo(AudioCapturerInfo &info);
42d5a2a63bSopenharmony_ci    bool Record();
43d5a2a63bSopenharmony_ci    bool Stop();
44d5a2a63bSopenharmony_ci    bool Release();
45d5a2a63bSopenharmony_ci    int32_t Read(uint8_t *buffer, size_t userSize, bool isBlockingRead);
46d5a2a63bSopenharmony_ci    uint64_t GetFrameCount();
47d5a2a63bSopenharmony_ci    State GetStatus();
48d5a2a63bSopenharmony_ci    bool GetTimestamp(Timestamp &timestamp, Timestamp::Timebase base);
49d5a2a63bSopenharmony_ci
50d5a2a63bSopenharmony_ciprivate:
51d5a2a63bSopenharmony_ci    bool StopInternal();
52d5a2a63bSopenharmony_ci
53d5a2a63bSopenharmony_ci    std::unique_ptr<AudioSource> audioSource_;
54d5a2a63bSopenharmony_ci    std::unique_ptr<AudioEncoder> audioEncoder_;
55d5a2a63bSopenharmony_ci    State status_ = INITIALIZED;
56d5a2a63bSopenharmony_ci    AudioCapturerInfo info_;
57d5a2a63bSopenharmony_ci    Timestamp timestamp_;
58d5a2a63bSopenharmony_ci    int32_t inputDeviceId_ = 0;
59d5a2a63bSopenharmony_ci    std::mutex mutex_;
60d5a2a63bSopenharmony_ci};
61d5a2a63bSopenharmony_ci}  // namespace Audio
62d5a2a63bSopenharmony_ci}  // namespace OHOS
63d5a2a63bSopenharmony_ci#endif  // FRAMEWORKS_AUDIO_CAPTURER_IMPL_H
64