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