From 93672007360bf2870758b7d295a5252dab02a452 Mon Sep 17 00:00:00 2001 From: huchang Date: Mon, 24 Mar 2025 16:03:47 +0800 Subject: [PATCH 1/3] add variable write data callback function Signed-off-by: huchang --- .../audio_renderer/native_audiorenderer.h | 19 +++++++++++++++++++ .../common/native_audiostreambuilder.h | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h index be7722f07..8d5e7369f 100644 --- a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h +++ b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h @@ -564,6 +564,25 @@ typedef void (*OH_AudioRenderer_OnInterruptCallback)(OH_AudioRenderer* renderer, typedef void (*OH_AudioRenderer_OnErrorCallback)(OH_AudioRenderer* renderer, void* userData, OH_AudioStream_Result error); +/** + * @brief Callback function of write data on Render. + * + * Different with OH_AudioRenderer_OnWriteDataCallback, this function allows the caller to write partial data instead of + * 0 or whole buffer size. + * + * @param renderer AudioRenderer where this callback occurs. + * @param userData User data which is passed by user. + * @param audioData Audio data pointer, where user should fill in audio data. + * @param audioDataSize Size of audio data that user should fill in. + * @return Length of the valid data that has written into audioData buffer. The return value must be in range of + * [0, audioDataSize]. If the return value is less than 0, the system changes it to 0. And, if the return value is greater + * than audioDataSize, the system changes it to audioDataSize. + * @see OH_AudioRenderer_OnWriteDataCallback + * @since 20 + */ +typedef int32_t (*OH_AudioRenderer_OnWriteArbitraryDataCallback)(OH_AudioRenderer* renderer, void* userData, + void* audioData, int32_t audioDataSize); + #ifdef __cplusplus } #endif diff --git a/multimedia/audio_framework/common/native_audiostreambuilder.h b/multimedia/audio_framework/common/native_audiostreambuilder.h index 5fb946d81..c7e020330 100644 --- a/multimedia/audio_framework/common/native_audiostreambuilder.h +++ b/multimedia/audio_framework/common/native_audiostreambuilder.h @@ -371,6 +371,24 @@ OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererInterruptMode(OH_AudioStr OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteDataCallback(OH_AudioStreamBuilder* builder, OH_AudioRenderer_OnWriteDataCallback callback, void* userData); +/** + * @brief Set the callback of writing data to renderer client. + * + * This function is similar with {@link OH_AudioStreamBuilder_SetRendererWriteDataCallback}. Only the last callback set by + * OH_AudioStreamBuilder_SetRendererWriteDataCallback or this function will become effective. Different with + * OH_AudioStreamBuilder_SetRendererWriteDataCallback, the callback in this function can return audio data of any length. + * + * @param builder Builder provided by OH_AudioStreamBuilder_Create() + * @param callback Callback to functions that will write audio data to renderer client. + * @param userData Pointer to an application data structure that will be passed to the callback functions. + * @return Result code. + * {@link AUDIOSTREAM_SUCCESS} Success. + * {@link AUDIOSTREAM_ERROR_INVALID_PARAM} Parameter is invalid, e.g. builder is nullptr, e.t.c. + * @since 20 + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteArbitraryDataCallback(OH_AudioStreamBuilder* builder, + OH_AudioRenderer_OnWriteArbitraryDataCallback callback, void* userData); + /** * Set the renderer volume mode of the stream client * -- Gitee From 97471bf41765cb5b0a6d3b53421cf8bff6d246bd Mon Sep 17 00:00:00 2001 From: huchang Date: Mon, 24 Mar 2025 22:05:23 +0800 Subject: [PATCH 2/3] rename function name Signed-off-by: huchang --- .../audio_renderer/native_audiorenderer.h | 11 ++++++----- .../common/native_audiostreambuilder.h | 9 +++++---- multimedia/audio_framework/ohaudio.ndk.json | 4 ++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h index 8d5e7369f..33e168c83 100644 --- a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h +++ b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h @@ -567,20 +567,21 @@ typedef void (*OH_AudioRenderer_OnErrorCallback)(OH_AudioRenderer* renderer, voi /** * @brief Callback function of write data on Render. * - * Different with OH_AudioRenderer_OnWriteDataCallback, this function allows the caller to write partial data instead of - * 0 or whole buffer size. + * Different with OH_AudioRenderer_OnWriteDataCallback, this function allows the caller to write partial data which + * ranges from 0 to the callback buffer size. If 0 is returned, the callback thread will sleep for a while. Otherwise, + * the system may callback again immediately. * * @param renderer AudioRenderer where this callback occurs. * @param userData User data which is passed by user. * @param audioData Audio data pointer, where user should fill in audio data. * @param audioDataSize Size of audio data that user should fill in. * @return Length of the valid data that has written into audioData buffer. The return value must be in range of - * [0, audioDataSize]. If the return value is less than 0, the system changes it to 0. And, if the return value is greater - * than audioDataSize, the system changes it to audioDataSize. + * [0, audioDataSize]. If the return value is less than 0, the system changes it to 0. And, if the return value is + * greater than audioDataSize, the system changes it to audioDataSize. * @see OH_AudioRenderer_OnWriteDataCallback * @since 20 */ -typedef int32_t (*OH_AudioRenderer_OnWriteArbitraryDataCallback)(OH_AudioRenderer* renderer, void* userData, +typedef int32_t (*OH_AudioRenderer_OnWriteDataCallbackAdvanced)(OH_AudioRenderer* renderer, void* userData, void* audioData, int32_t audioDataSize); #ifdef __cplusplus diff --git a/multimedia/audio_framework/common/native_audiostreambuilder.h b/multimedia/audio_framework/common/native_audiostreambuilder.h index c7e020330..c0ca9616e 100644 --- a/multimedia/audio_framework/common/native_audiostreambuilder.h +++ b/multimedia/audio_framework/common/native_audiostreambuilder.h @@ -374,9 +374,10 @@ OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteDataCallback(OH_Audi /** * @brief Set the callback of writing data to renderer client. * - * This function is similar with {@link OH_AudioStreamBuilder_SetRendererWriteDataCallback}. Only the last callback set by - * OH_AudioStreamBuilder_SetRendererWriteDataCallback or this function will become effective. Different with - * OH_AudioStreamBuilder_SetRendererWriteDataCallback, the callback in this function can return audio data of any length. + * This function is similar with {@link OH_AudioStreamBuilder_SetRendererWriteDataCallback}. Only the last callback set + * by OH_AudioStreamBuilder_SetRendererWriteDataCallback or this function will become effective. Different with + * OH_AudioStreamBuilder_SetRendererWriteDataCallback, the callback in this function can return audio data of any + * length. * * @param builder Builder provided by OH_AudioStreamBuilder_Create() * @param callback Callback to functions that will write audio data to renderer client. @@ -386,7 +387,7 @@ OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteDataCallback(OH_Audi * {@link AUDIOSTREAM_ERROR_INVALID_PARAM} Parameter is invalid, e.g. builder is nullptr, e.t.c. * @since 20 */ -OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteArbitraryDataCallback(OH_AudioStreamBuilder* builder, +OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteDataCallbackAdvanced(OH_AudioStreamBuilder* builder, OH_AudioRenderer_OnWriteArbitraryDataCallback callback, void* userData); /** diff --git a/multimedia/audio_framework/ohaudio.ndk.json b/multimedia/audio_framework/ohaudio.ndk.json index 9366ddd75..66cc6a35d 100644 --- a/multimedia/audio_framework/ohaudio.ndk.json +++ b/multimedia/audio_framework/ohaudio.ndk.json @@ -410,5 +410,9 @@ { "first_introduced": "18", "name": "OH_AudioStreamBuilder_SetCapturerErrorCallback" + }, + { + "first_introduced": "20", + "name": "OH_AudioStreamBuilder_SetRendererWriteDataCallbackAdvanced" } ] -- Gitee From ebcbb07632fb2bd5a35373349856a4486f9d7421 Mon Sep 17 00:00:00 2001 From: huchang Date: Wed, 26 Mar 2025 21:27:59 +0800 Subject: [PATCH 3/3] fix name Signed-off-by: huchang --- multimedia/audio_framework/common/native_audiostreambuilder.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multimedia/audio_framework/common/native_audiostreambuilder.h b/multimedia/audio_framework/common/native_audiostreambuilder.h index c0ca9616e..01c2805e9 100644 --- a/multimedia/audio_framework/common/native_audiostreambuilder.h +++ b/multimedia/audio_framework/common/native_audiostreambuilder.h @@ -388,7 +388,7 @@ OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteDataCallback(OH_Audi * @since 20 */ OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererWriteDataCallbackAdvanced(OH_AudioStreamBuilder* builder, - OH_AudioRenderer_OnWriteArbitraryDataCallback callback, void* userData); + OH_AudioRenderer_OnWriteDataCallbackAdvanced callback, void* userData); /** * Set the renderer volume mode of the stream client -- Gitee