From b48f111f27058b545a95b194268ad015a8ae102c 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 | 17 +++++++++++++++++ .../common/native_audiostreambuilder.h | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h index c5a1a869ee4..6f49416ac17 100644 --- a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h +++ b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h @@ -632,6 +632,23 @@ OH_AudioStream_Result OH_AudioRenderer_SetLoudnessGain(OH_AudioRenderer* rendere */ OH_AudioStream_Result OH_AudioRenderer_GetLoudnessGain(OH_AudioRenderer* renderer, float* loudnessGain); + * @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 7ab8637c9ea..9515c9d3145 100644 --- a/multimedia/audio_framework/common/native_audiostreambuilder.h +++ b/multimedia/audio_framework/common/native_audiostreambuilder.h @@ -386,6 +386,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 bda70fdda1fceb46c3a9957a833e4dd7bf6a2473 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 6f49416ac17..1a60db82bac 100644 --- a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h +++ b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h @@ -634,20 +634,21 @@ OH_AudioStream_Result OH_AudioRenderer_GetLoudnessGain(OH_AudioRenderer* rendere * @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 9515c9d3145..d24e536ec07 100644 --- a/multimedia/audio_framework/common/native_audiostreambuilder.h +++ b/multimedia/audio_framework/common/native_audiostreambuilder.h @@ -389,9 +389,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. @@ -401,7 +402,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 d619281dbd7..8ea783351f9 100644 --- a/multimedia/audio_framework/ohaudio.ndk.json +++ b/multimedia/audio_framework/ohaudio.ndk.json @@ -506,5 +506,9 @@ { "first_introduced": "20", "name": "OH_AudioRenderer_GetLoudnessGain" + }, + { + "first_introduced": "20", + "name": "OH_AudioStreamBuilder_SetRendererWriteDataCallbackAdvanced" } ] -- Gitee From 8ced8b4820a134dfa0e2189b9ece9ff71e63db23 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 d24e536ec07..f8f10479c60 100644 --- a/multimedia/audio_framework/common/native_audiostreambuilder.h +++ b/multimedia/audio_framework/common/native_audiostreambuilder.h @@ -403,7 +403,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