1 /* 2 * Copyright (c) 2025-2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef AUDIO_STUTTER_H 16 #define AUDIO_STUTTER_H 17 18 #include <parcel.h> 19 #include <audio_stream_info.h> 20 #include <audio_buffer_desc.h> 21 22 namespace OHOS { 23 namespace AudioStandard { 24 25 enum DataTransferStateChangeType { 26 AUDIO_STREAM_START, // stream start 27 AUDIO_STREAM_STOP, // stream stop 28 AUDIO_STREAM_PAUSE, // stream pause 29 DATA_TRANS_STOP, // data transfer stop 30 DATA_TRANS_RESUME, // data transfer resume 31 }; 32 33 enum BadDataTransferType { 34 NO_DATA_TRANS, // monitor none data transfer 35 SILENCE_DATA_TRANS, // monitor silence data transfer 36 MAX_DATATRANS_TYPE 37 }; 38 39 struct AudioRendererDataTransferStateChangeInfo : public Parcelable { 40 int32_t clientPid; // client pid 41 int32_t clientUID; // client uid 42 int32_t sessionId; // session id 43 StreamUsage streamUsage; // stream type 44 DataTransferStateChangeType stateChangeType; 45 bool isBackground; 46 int32_t badDataRatio[MAX_DATATRANS_TYPE]; 47 48 AudioRendererDataTransferStateChangeInfo() = default; 49 ~AudioRendererDataTransferStateChangeInfo() = default; MarshallingAudioRendererDataTransferStateChangeInfo50 bool Marshalling(Parcel &parcel) const override 51 { 52 bool ret = parcel.WriteInt32(clientPid) && parcel.WriteInt32(clientUID) && 53 parcel.WriteInt32(sessionId) && parcel.WriteInt32(static_cast<int32_t>(streamUsage)) && 54 parcel.WriteUint32(static_cast<int32_t>(stateChangeType)) && 55 parcel.WriteBool(isBackground); 56 57 for (uint32_t i = 0; i < MAX_DATATRANS_TYPE; i++) { 58 ret = ret && parcel.WriteInt32(badDataRatio[i]); 59 } 60 61 return ret; 62 } UnmarshallingAudioRendererDataTransferStateChangeInfo63 static AudioRendererDataTransferStateChangeInfo *Unmarshalling(Parcel &parcel) 64 { 65 auto info = new(std::nothrow) AudioRendererDataTransferStateChangeInfo(); 66 if (info == nullptr) { 67 return nullptr; 68 } 69 70 info->clientPid = parcel.ReadInt32(); 71 info->clientUID = parcel.ReadInt32(); 72 info->sessionId = parcel.ReadInt32(); 73 info->streamUsage = static_cast<StreamUsage>(parcel.ReadInt32()); 74 info->stateChangeType = static_cast<DataTransferStateChangeType>(parcel.ReadInt32()); 75 info->isBackground = parcel.ReadBool(); 76 77 for (uint32_t i = 0; i < MAX_DATATRANS_TYPE; i++) { 78 info->badDataRatio[i] = parcel.ReadInt32(); 79 } 80 return info; 81 } 82 }; 83 84 struct DataTransferMonitorParam : public Parcelable { 85 int32_t clientUID; 86 int32_t badDataTransferTypeBitMap; 87 int64_t timeInterval; 88 int32_t badFramesRatio; 89 90 DataTransferMonitorParam() = default; 91 ~DataTransferMonitorParam() = default; 92 bool operator==(const DataTransferMonitorParam& param) const 93 { 94 return clientUID == param.clientUID && badDataTransferTypeBitMap == param.badDataTransferTypeBitMap && 95 timeInterval == param.timeInterval && badFramesRatio == param.badFramesRatio; 96 } 97 MarshallingDataTransferMonitorParam98 bool Marshalling(Parcel &parcel) const override 99 { 100 return parcel.WriteInt32(clientUID) && 101 parcel.WriteInt32(badDataTransferTypeBitMap) && 102 parcel.WriteInt64(timeInterval) && 103 parcel.WriteInt32(badFramesRatio); 104 } 105 UnmarshallingDataTransferMonitorParam106 static DataTransferMonitorParam *Unmarshalling(Parcel &parcel) 107 { 108 auto param = new(std::nothrow) DataTransferMonitorParam(); 109 if (param == nullptr) { 110 return nullptr; 111 } 112 param->clientUID = parcel.ReadInt32(); 113 param->badDataTransferTypeBitMap = parcel.ReadInt32(); 114 param->timeInterval = parcel.ReadInt64(); 115 param->badFramesRatio = parcel.ReadInt32(); 116 return param; 117 } 118 }; 119 } // namespace AudioStandard 120 } // namespace OHOS 121 #endif // AUDIO_STUTTER_H 122