1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#ifndef AUDIO_COMMON_H 17094332d3Sopenharmony_ci#define AUDIO_COMMON_H 18094332d3Sopenharmony_ci#include <securec.h> 19094332d3Sopenharmony_ci#include "audio_internal.h" 20094332d3Sopenharmony_ci#include "osal_time.h" 21094332d3Sopenharmony_cinamespace OHOS::HDI::Audio_Bluetooth { 22094332d3Sopenharmony_civoid AudioMemFree(void **ppMem) 23094332d3Sopenharmony_ci{ 24094332d3Sopenharmony_ci if ((ppMem != NULL) && ((*ppMem) != NULL)) { 25094332d3Sopenharmony_ci free(*ppMem); 26094332d3Sopenharmony_ci *ppMem = NULL; 27094332d3Sopenharmony_ci } 28094332d3Sopenharmony_ci return; 29094332d3Sopenharmony_ci} 30094332d3Sopenharmony_ci 31094332d3Sopenharmony_ciint32_t AudioGetSysTime(char *s, int32_t len) 32094332d3Sopenharmony_ci{ 33094332d3Sopenharmony_ci OsalTimespec time; 34094332d3Sopenharmony_ci if (s == NULL) { 35094332d3Sopenharmony_ci return -1; 36094332d3Sopenharmony_ci } 37094332d3Sopenharmony_ci OsalGetTime(&time); 38094332d3Sopenharmony_ci s[0] = 0; 39094332d3Sopenharmony_ci int32_t ret = snprintf_s(s, len, len - 1, "[%llu.%llu]", time.sec, time.usec); 40094332d3Sopenharmony_ci return ret; 41094332d3Sopenharmony_ci} 42094332d3Sopenharmony_ci 43094332d3Sopenharmony_ciint32_t CheckAttrSamplingRate(uint32_t param) 44094332d3Sopenharmony_ci{ 45094332d3Sopenharmony_ci switch (param) { 46094332d3Sopenharmony_ci case TELHPONE_RATE: 47094332d3Sopenharmony_ci case BROADCAST_AM_RATE: 48094332d3Sopenharmony_ci case BROADCAST_FM_RATE: 49094332d3Sopenharmony_ci case MINI_CAM_DV_RATE: 50094332d3Sopenharmony_ci case MUSIC_RATE: 51094332d3Sopenharmony_ci case HIGHT_MUSIC_RATE: 52094332d3Sopenharmony_ci case AUDIO_SAMPLE_RATE_12000: 53094332d3Sopenharmony_ci case AUDIO_SAMPLE_RATE_16000: 54094332d3Sopenharmony_ci case AUDIO_SAMPLE_RATE_24000: 55094332d3Sopenharmony_ci case AUDIO_SAMPLE_RATE_64000: 56094332d3Sopenharmony_ci case AUDIO_SAMPLE_RATE_96000: 57094332d3Sopenharmony_ci return HDF_SUCCESS; 58094332d3Sopenharmony_ci default: 59094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 60094332d3Sopenharmony_ci } 61094332d3Sopenharmony_ci} 62094332d3Sopenharmony_ci 63094332d3Sopenharmony_ciint32_t CheckAttrFormat(AudioFormat param) 64094332d3Sopenharmony_ci{ 65094332d3Sopenharmony_ci switch (param) { 66094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_PCM_8_BIT: 67094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_PCM_16_BIT: 68094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_PCM_24_BIT: 69094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_PCM_32_BIT: 70094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_AAC_MAIN: 71094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_AAC_LC: 72094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_AAC_LD: 73094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_AAC_ELD: 74094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_AAC_HE_V1: 75094332d3Sopenharmony_ci case AUDIO_FORMAT_TYPE_AAC_HE_V2: 76094332d3Sopenharmony_ci break; 77094332d3Sopenharmony_ci default: 78094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 79094332d3Sopenharmony_ci } 80094332d3Sopenharmony_ci return HDF_SUCCESS; 81094332d3Sopenharmony_ci} 82094332d3Sopenharmony_ci 83094332d3Sopenharmony_ciint32_t AudioCheckParaAttr(const struct AudioSampleAttributes *attrs) 84094332d3Sopenharmony_ci{ 85094332d3Sopenharmony_ci if (attrs == NULL) { 86094332d3Sopenharmony_ci return HDF_FAILURE; 87094332d3Sopenharmony_ci } 88094332d3Sopenharmony_ci int32_t ret; 89094332d3Sopenharmony_ci AudioCategory audioCategory = attrs->type; 90094332d3Sopenharmony_ci if (AUDIO_IN_MEDIA != audioCategory && AUDIO_IN_COMMUNICATION != audioCategory) { 91094332d3Sopenharmony_ci return HDF_ERR_NOT_SUPPORT; 92094332d3Sopenharmony_ci } 93094332d3Sopenharmony_ci AudioFormat audioFormat = attrs->format; 94094332d3Sopenharmony_ci ret = CheckAttrFormat(audioFormat); 95094332d3Sopenharmony_ci if (ret < 0) { 96094332d3Sopenharmony_ci return ret; 97094332d3Sopenharmony_ci } 98094332d3Sopenharmony_ci uint32_t sampleRateTemp = attrs->sampleRate; 99094332d3Sopenharmony_ci return CheckAttrSamplingRate(sampleRateTemp); 100094332d3Sopenharmony_ci} 101094332d3Sopenharmony_ci 102094332d3Sopenharmony_ciint32_t TimeToAudioTimeStamp(uint64_t bufferFrameSize, struct AudioTimeStamp *time, uint32_t sampleRate) 103094332d3Sopenharmony_ci{ 104094332d3Sopenharmony_ci if (time == NULL) { 105094332d3Sopenharmony_ci return HDF_FAILURE; 106094332d3Sopenharmony_ci } 107094332d3Sopenharmony_ci time->tvSec += (int64_t)bufferFrameSize / (int64_t)sampleRate; 108094332d3Sopenharmony_ci int64_t lastBufFrames = bufferFrameSize % ((int64_t)sampleRate); 109094332d3Sopenharmony_ci time->tvNSec += (lastBufFrames * SEC_TO_NSEC) / ((int64_t)sampleRate); 110094332d3Sopenharmony_ci if (time->tvNSec >= SEC_TO_NSEC) { 111094332d3Sopenharmony_ci time->tvSec += 1; 112094332d3Sopenharmony_ci time->tvNSec -= SEC_TO_NSEC; 113094332d3Sopenharmony_ci } 114094332d3Sopenharmony_ci return HDF_SUCCESS; 115094332d3Sopenharmony_ci} 116094332d3Sopenharmony_ci} 117094332d3Sopenharmony_ci#endif