• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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