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 ×tamp, 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