napi_get_arraybuffer_info 和 napi_create_arraybuffer 的使用

将js侧传递给native侧的Uint8Array乘2后返回

HarmonyOS
2024-05-22 23:33:51
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
yijuefei

使用的核心API

napi_get_arraybuffer_info
napi_create_arraybuffer
napi_create_typedarray

核心代码解释

static napi_value Multiply(napi_env env, napi_callback_info info) { 
   size_t argc = 2; 
   napi_value args[2]; 
   napi_get_cb_info(env, info, &argc, args, NULL, NULL); 
   napi_value input_array = args[0]; 
​ 
   double multiplier; 
   napi_get_value_double(env, args[1], &multiplier); 
​ 
   napi_typedarray_type type; 
   napi_value input_buffer; 
   size_t byte_offset; 
   size_t i, length; 
   napi_get_typedarray_info(env, input_array, &type, &length, NULL, &input_buffer, &byte_offset); 
​ 
   void *data; 
   size_t byte_length; 
   napi_get_arraybuffer_info(env, input_buffer, &data, &byte_length); 
   napi_value output_buffer; 
   void *output_ptr = NULL; 
   napi_create_arraybuffer(env, byte_length, &output_ptr, &output_buffer); 
​ 
   napi_value output_array; 
   napi_create_typedarray(env, type, length, output_buffer, byte_offset, &output_array); 
​ 
   if (type == napi_uint8_array) { 
   uint8_t *input_bytes = (uint8_t *)(data) + byte_offset; 
   uint8_t *output_bytes = (uint8_t *)(output_ptr); 
   for (i = 0; i < length; i++) { 
   OH_LOG_INFO(LOG_APP, "Multiply_for_arraybuffer input_bytes %{public}d", input_bytes[i]); 
   output_bytes[i] = (uint8_t)(input_bytes[i] * multiplier); 
   OH_LOG_INFO(LOG_APP, "Multiply_for_arraybuffer output_bytes %{public}d", input_bytes[i]); 
  } 
  } else if (type == napi_float64_array) { 
   double *input_doubles = (double *)((uint8_t *)(data) + byte_offset); 
   double *output_doubles = (double *)(output_ptr); 
   for (i = 0; i < length; i++) { 
   output_doubles[i] = input_doubles[i] * multiplier; 
  } 
  } else { 
   napi_throw_error(env, NULL, "Typed array was of a type not expected by test."); 
   return NULL; 
  } 
   return output_array; 
​ 
}

实现效果

注明适配的版本信息

IDE版本:4.1.3.600

SDK版本:DP1

分享
微博
QQ
微信
回复
2024-05-23 21:22:00
相关问题
Native如何通过napi获取ArrayBuffer
2032浏览 • 1回复 待解决
undefined symbol napi_create_threadsafe_function
2903浏览 • 1回复 待解决
napi 基本使用场景示例
488浏览 • 1回复 待解决
在 string 转成ArrayBuffer报错
76浏览 • 0回复 待解决
如何将ArrayBuffer转成string
714浏览 • 1回复 待解决
NAPI介绍(九) - gdb调试
201浏览 • 1回复 待解决
ArrayBuffer是否一定要传固定长度参数
795浏览 • 1回复 待解决
需要提供napi反调ets例子
564浏览 • 1回复 待解决
Uint8Array如何转成ArrayBuffer
756浏览 • 1回复 待解决
NAPI中定义并注册Class
364浏览 • 1回复 待解决
napi常见用法:class对象绑定
485浏览 • 1回复 待解决
是否有简洁易用NAPI开发框架
1391浏览 • 1回复 待解决
"NAPI通信耗时长"导致丢帧分析
193浏览 • 1回复 待解决
为什么禁止缓存napi_env
629浏览 • 1回复 待解决