1 /*
2  * Copyright (c) 2022 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 
16 #ifndef AUDIO_RENDERER_SINK_INTF_H
17 #define AUDIO_RENDERER_SINK_INTF_H
18 
19 #include "audio_hdiadapter_info.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 // should be same with IAudioSinkAttr in i_audio_renderer_sink.h
26 typedef struct {
27     const char *adapterName;
28     uint32_t openMicSpeaker;
29     enum HdiAdapterFormat format;
30     uint32_t sampleRate;
31     uint32_t channel;
32     float volume;
33     const char *filePath;
34     const char *deviceNetworkId;
35     int32_t deviceType;
36     unsigned long channelLayout;
37     const char *aux;
38 } SinkAttr;
39 
40 struct RendererSinkAdapter {
41     int32_t deviceClass;
42     void* wapper;
43     int32_t (*RendererSinkInit)(struct RendererSinkAdapter *adapter, const SinkAttr *attr);
44     void (*RendererSinkDeInit)(struct RendererSinkAdapter *adapter);
45     int32_t (*RendererSinkStart)(struct RendererSinkAdapter *adapter);
46     int32_t (*RendererSinkPause)(struct RendererSinkAdapter *adapter);
47     int32_t (*RendererSinkResume)(struct RendererSinkAdapter *adapter);
48     int32_t (*RendererSinkStop)(struct RendererSinkAdapter *adapter);
49     int32_t (*RendererRenderFrame)(struct RendererSinkAdapter *adapter, char *data, uint64_t len, uint64_t *writeLen);
50     int32_t (*RendererSplitRenderFrame)(struct RendererSinkAdapter *adapter, char *data, uint64_t len,
51         uint64_t *writeLen, char *streamType);
52     int32_t (*RendererSinkSetVolume)(struct RendererSinkAdapter *adapter, float left, float right);
53     int32_t (*RendererSinkGetVolume)(struct RendererSinkAdapter *adapter, float *left, float *right);
54     int32_t (*RendererSinkGetLatency)(struct RendererSinkAdapter *adapter, uint32_t *latency);
55     int32_t (*RendererRegCallback)(struct RendererSinkAdapter *adapter, int8_t *cb, int8_t *userdata);
56     int32_t (*RendererSinkGetPresentationPosition)(struct RendererSinkAdapter *adapter, uint64_t* frames,
57         int64_t* timeSec, int64_t* timeNanoSec);
58     int32_t (*RendererSinkFlush)(struct RendererSinkAdapter *adapter);
59     int32_t (*RendererSinkReset)(struct RendererSinkAdapter *adapter);
60     int32_t (*RendererSinkSetBufferSize)(struct RendererSinkAdapter *adapter, uint32_t sizeMs);
61     int32_t (*RendererSinkOffloadRunningLockInit)(struct RendererSinkAdapter *adapter);
62     int32_t (*RendererSinkOffloadRunningLockLock)(struct RendererSinkAdapter *adapter);
63     int32_t (*RendererSinkOffloadRunningLockUnlock)(struct RendererSinkAdapter *adapter);
64     int32_t (*RendererSinkSetPaPower)(struct RendererSinkAdapter *adapter, int32_t flag);
65     int32_t (*RendererSinkSetPriPaPower)(struct RendererSinkAdapter *adapter);
66     int32_t (*RendererSinkUpdateAppsUid)(struct RendererSinkAdapter *adapter, const int32_t appsUid[MAX_MIX_CHANNELS],
67         const size_t size);
68 };
69 
70 int32_t FillinSinkWapper(const char *device, const char *deviceNetworkId, struct RendererSinkAdapter *adapter);
71 int32_t IAudioRendererSinkInit(struct RendererSinkAdapter *adapter, const SinkAttr *attr);
72 void IAudioRendererSinkDeInit(struct RendererSinkAdapter *adapter);
73 int32_t IAudioRendererSinkStart(struct RendererSinkAdapter *adapter);
74 int32_t IAudioRendererSinkStop(struct RendererSinkAdapter *adapter);
75 int32_t IAudioRendererSinkPause(struct RendererSinkAdapter *adapter);
76 int32_t IAudioRendererSinkResume(struct RendererSinkAdapter *adapter);
77 int32_t IAudioRendererSinkRenderFrame(struct RendererSinkAdapter *adapter, char *data, uint64_t len,
78     uint64_t *writeLen);
79 int32_t IAudioRendererSinkSplitRenderFrame(struct RendererSinkAdapter *adapter, char *data, uint64_t len,
80     uint64_t *writeLen, char *streamType);
81 int32_t IAudioRendererSinkSetVolume(struct RendererSinkAdapter *adapter, float left, float right);
82 int32_t IAudioRendererSinkGetVolume(struct RendererSinkAdapter *adapter, float *left, float *right);
83 int32_t IAudioRendererSinkGetLatency(struct RendererSinkAdapter *adapter, uint32_t *latency);
84 int32_t IAudioRendererSinkRegCallback(struct RendererSinkAdapter *adapter, int8_t *cb, int8_t *userdata);
85 int32_t IAudioRendererSinkGetPresentationPosition(struct RendererSinkAdapter *adapter, uint64_t* frames,
86     int64_t* timeSec, int64_t* timeNanoSec);
87 int32_t IAudioRendererSinkFlush(struct RendererSinkAdapter *adapter);
88 int32_t IAudioRendererSinkReset(struct RendererSinkAdapter *adapter);
89 int32_t IAudioRendererSinkSetBufferSize(struct RendererSinkAdapter *adapter, uint32_t sizeMs);
90 int32_t IAudioRendererSinkOffloadRunningLockInit(struct RendererSinkAdapter *adapter);
91 int32_t IAudioRendererSinkOffloadRunningLockLock(struct RendererSinkAdapter *adapter);
92 int32_t IAudioRendererSinkOffloadRunningLockUnlock(struct RendererSinkAdapter *adapter);
93 int32_t IAudioRendererSinkSetPaPower(struct RendererSinkAdapter *adapter, int32_t flag);
94 int32_t IAudioRendererSinkSetPriPaPower(struct RendererSinkAdapter *adapter);
95 int32_t IAudioRendererSinkUpdateAppsUid(struct RendererSinkAdapter *adapter, const int32_t appsUid[MAX_MIX_CHANNELS],
96     const size_t size);
97 
98 #ifdef __cplusplus
99 }
100 #endif
101 #endif // AUDIO_RENDERER_SINK_INTF_H
102