RK3588 linux RGA初探

在这里插入图片描述

概述

RGA (Raster Graphic Acceleration Unit)是一个独立的2D硬件加速器,可用于加速点/线绘制,执行图像缩放、旋转、bitBlt、alpha混合等常见的2D图形操作。

本文基于以下版本编写:
commit fb5f019ea0191ec1c34f49ac8be447ac8921aadd (HEAD -> main, origin/main, origin/HEAD)
Author: Yu Qiaowei cerf.yu@rock-chips.com
Date: Wed Apr 3 18:24:42 2024 +0800

fix network disk link cannot be opened

Signed-off-by: Yu Qiaowei cerf.yu@rock-chips.com
Change-Id: I7dae60823917713bb1a5e64bb47c894db5c44cc8

librga/
    CHANGELOG.md
    COPYING
    docs/ 文档
    include/ 头文件
    libs/ so库
    README.md*
    samples/ 参考例子
    toolchains/ 交叉编译链
    tools/

基本使用

参考文档: docs/Rockchip_Developer_Guide_RGA_CN.md
软件支持库提供以下API,异步模式仅支持C++实现。

  • querystring: 查询获取当前芯片平台RGA硬件版本与功能支持信息,以字符串的形式返回。
  • imcheckHeader: 校验当前使用头文件版本与librga版本差异。
  • importbuffer_T: 将外部内存(dma_fd、虚拟地址、物理地址)导入RGA驱动内部,实现硬件快速访问物理连续/非物理连续的内存。
  • releasebuffer_handle: 将外部buffer从RGA驱动内部解除引用与映射。
  • wrapbuffer_handle: 快速封装图像缓冲区结构(rga_buffer_t)。
  • imbeginJob:创建RGA图像处理任务。
  • imendJob: 提交并执行RGA图像处理任务。
  • imcancelJob: 取消并删除RGA图像处理任务。
  • imcopy: 调用RGA实现快速图像拷贝操作。
  • imcopyTask: 向RGA图像任务中添加快速图像拷贝操作。
  • imresize: 调用RGA实现快速图像缩放操作。
  • imresizeTask: 向RGA图像任务中添加快速图像缩放操作。
  • impyramind: 调用RGA实现快速图像金字塔操作。
  • imcrop: 调用RGA实现快速图像裁剪操作。
  • imcropTask: 向RGA图像任务中添加快速图像裁剪操作。
  • imtranslate: 调用RGA实现快速图像平移操作。
  • imtranslateTask: 向RGA图像任务中添加快速图像平移操作。
  • imcvtcolor: 调用RGA实现快速图像格式转换。
  • imcvtcolorTask: 向RGA图像任务中添加快速图像格式转换。
  • imrotate: 调用RGA实现快速图像旋转操作。
  • imrotateTask: 向RGA图像任务中添加快速图像旋转操作。
  • imflip: 调用RGA实现快速图像翻转操作。
  • imflipTask: 向RGA图像任务中添加快速图像翻转操作。
  • imblend: 调用RGA实现双通道快速图像合成操作。
  • imblendTask: 向RGA图像任务中添加双通道快速图像合成操作。
  • imcomposite: 调用RGA实现三通道快速图像合成操作。
  • imcompositeTask: 向RGA图像任务中添加三通道快速图像合成操作。
  • imcolorkey: 调用RGA实现快速图像颜色键操作。
  • imcolorkeyTask: 向RGA图像任务中添加快速图像颜色键操作。
  • imosd:调用RGA实现快速图像OSD字幕叠加。
  • imosdTask:向RGA图像任务中添加快速图像OSD字幕叠加。
  • imquantize: 调用RGA实现快速图像运算点前处理(量化)操作。
  • imquantizeTask: 向RGA图像任务中添加快速图像运算点前处理(量化)操作。
  • imrop: 调用RGA实现快速图像光栅操作。
  • imropTask: 向RGA图像任务中添加快速图像光栅操作。
  • imfill: 调用RGA实现快速图像填充操作。
  • imfillArray: 调用RGA实现多组快速图像填充操作。
  • imfillTask: 向RGA图像任务中添加快速图像填充操作。
  • imfillTaskArray: 向RGA图像任务中添加多组快速图像填充操作。
  • imrectangle: 调用RGA实现等距矩形边框快速绘制操作。
  • imrectangleArray: 调用RGA实现多组等距矩形边框快速绘制操作。
  • imrectangleTask: 向RGA图像任务中添加等距矩形边框快速绘制操作。
  • imrectangleTaskArray: 向RGA图像任务中添加多组等距矩形边框快速绘制操作。
  • immakeBorder: 调用RGA实现矩形边框快速绘制操作。
  • immosaic:调用RGA实现快速图像马赛克遮盖。
  • immosaicArray:调用RGA实现快速图像马赛克遮盖。
  • immosaicTask:向RGA图像任务中添加快速图像马赛克遮盖。
  • immosaicTaskArray:向RGA图像任务中添加快速图像马赛克遮盖。
  • improcess: 调用RGA实现快速图像复合处理操作。
  • improcessTask: 向RGA图像任务中添加快速图像复合处理操作。
  • imcheck: 校验参数是否合法,以及当前硬件是否支持该操作。
  • imsync: 用于异步模式时,同步任务完成状态。
  • imconfig: 向当前线程上下文添加默认配置。

直接上手demo

图片缩放

samples/resize_demo/
├── cmake-android.sh
├── cmake-linux.sh
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    ├── rga_resize_config_interpolation_demo.cpp
    ├── rga_resize_demo.cpp
    ├── rga_resize_rect_demo.cpp
    └── rga_resize_uv_downsampling_demo.cpp

samples/resize_demo$ ./cmake-linux.sh

/work/devEnv/librga/samples/resize_demo/build/build_linux /work/devEnv/librga/samples/resize_demo
load /work/devEnv/librga/samples/resize_demo/../../toolchains/toolchain_linux.cmake
load /work/devEnv/librga/samples/resize_demo/../../libs/Linux/gcc-aarch64/librga.so
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:16 (project):
  The CMAKE_C_COMPILER:

    /home/yqw/workspace/linux/common/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-rockchip1031-linux-gnu-gcc

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:16 (project):
  The CMAKE_CXX_COMPILER:

    /home/yqw/workspace/linux/common/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-rockchip1031-linux-gnu-g++

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!
See also "/work/devEnv/librga/samples/resize_demo/build/build_linux/CMakeFiles/CMakeOutput.log".
See also "/work/devEnv/librga/samples/resize_demo/build/build_linux/CMakeFiles/CMakeError.log".
make: *** No targets specified and no makefile found.  Stop.
make: *** No rule to make target 'install'.  Stop.

原始的代码编译不过… 真坎坷! /home/yqw/workspace/ 这个路径应该是写这个demo的工程师的
修改下交叉编译链

git diff ../../toolchains/
diff --git a/toolchains/toolchain_linux.cmake b/toolchains/toolchain_linux.cmake
index f446557..aa5f9b3 100644
--- a/toolchains/toolchain_linux.cmake
+++ b/toolchains/toolchain_linux.cmake
@@ -1,5 +1,5 @@
-SET(TOOLCHAIN_HOME "/home/yqw/workspace/linux/common/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu")
-SET(TOOLCHAIN_NAME "aarch64-rockchip1031-linux-gnu")
+SET(TOOLCHAIN_HOME "/usr")
+SET(TOOLCHAIN_NAME "aarch64-linux-gnu")
 
 # this is required
 #SET(CMAKE_SYSTEM_NAME Linux)

samples/resize_demo$ ./cmake-linux.sh

[ 81%] Linking CXX executable rga_resize_rect_demo
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: cannot find -lrga
collect2: error: ld returned 1 exit status
[ 90%] Linking CXX executable rga_resize_uv_downsampling_demo
make[2]: *** [src/CMakeFiles/rga_resize_demo.dir/build.make:90: src/rga_resize_demo] Error 1
make[1]: *** [CMakeFiles/Makefile2:210: src/CMakeFiles/rga_resize_demo.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[100%] Linking CXX executable rga_resize_config_interpolation_demo
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: cannot find -lrga
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/rga_resize_rect_demo.dir/build.make:90: src/rga_resize_rect_demo] Error 1
make[1]: *** [CMakeFiles/Makefile2:183: src/CMakeFiles/rga_resize_rect_demo.dir/all] Error 2
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: cannot find -lrga
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/rga_resize_uv_downsampling_demo.dir/build.make:90: src/rga_resize_uv_downsampling_demo] Error 1
make[1]: *** [CMakeFiles/Makefile2:156: src/CMakeFiles/rga_resize_uv_downsampling_demo.dir/all] Error 2
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: cannot find -lrga
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/rga_resize_config_interpolation_demo.dir/build.make:90: src/rga_resize_config_interpolation_demo] Error 1
make[1]: *** [CMakeFiles/Makefile2:129: src/CMakeFiles/rga_resize_config_interpolation_demo.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
[ 27%] Built target utils_obj
[ 36%] Linking CXX executable rga_resize_config_interpolation_demo
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: cannot find -lrga
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/rga_resize_config_interpolation_demo.dir/build.make:90: src/rga_resize_config_interpolation_demo] Error 1
make[1]: *** [CMakeFiles/Makefile2:129: src/CMakeFiles/rga_resize_config_interpolation_demo.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

找不到librga库, 项目的目录结构更新了, 代码还没改过来

git diff cmake-linux.sh
diff --git a/samples/resize_demo/cmake-linux.sh b/samples/resize_demo/cmake-linux.sh
index 3604521..a3f2f42 100755
--- a/samples/resize_demo/cmake-linux.sh
+++ b/samples/resize_demo/cmake-linux.sh
@@ -5,7 +5,7 @@ SAMPLES_DIR=${SCRIPT_DIR}/..
 
 # The following options require configuration
 TOOLCHAIN_PATH=${SAMPLES_DIR}/../toolchains/toolchain_linux.cmake
-LIBRGA_PATH=${SAMPLES_DIR}/../build/build_linux/install/lib
+LIBRGA_PATH=${SAMPLES_DIR}/../libs/Linux/gcc-aarch64
 BUILD_DIR=build/build_linux
 BUILD_TYPE=Release

编译成功后:

build/build_linux/install/bin/
├── rga_resize_config_interpolation_demo
├── rga_resize_demo
├── rga_resize_rect_demo
└── rga_resize_uv_downsampling_demo

丢板子里测试:
代码实现了 1280x720 缩放到 1920x1080 的RGBA 格式转化, 测试文件路径: librga/samples/sample_file/in0w1280-h720-rgba8888.bin

#测试程序
adb push build/build_linux/install/bin/rga_resize_demo /rga/
#测试文件
adb push ../sample_file/in0w1280-h720-rgba8888.bin /data/

进入到主板执行

root@rk3588:/rga# ./rga_resize_demo 
rga_api version 1.10.1_[0]
rga_resize_demo running success!
open /data/out0w1920-h1080-rgba8888.bin and write ok

root@rk3588:/rga# ll /data/*bin
-rwxrwxrwx 1 root root 3.6M Jul  1  2024 /data/in0w1280-h720-rgba8888.bin
-rw-r--r-- 1 root root 8.0M Jan  1 00:13 /data/out0w1920-h1080-rgba8888.bin

RGBA 转换为 BMP:

# pull 输出图片
adb pull /data/out0w1920-h1080-rgba8888.bin out0w1920-h1080-rgba8888.rgba
# 使用convert 转换
# 注意: 确保你已经安装了ImageMagick
# sudo apt-get install imagemagick
convert -depth 8 -size 1920x1080 -colors 256 -colorspace sRGB out0w1920-h1080-rgba8888.rgba -alpha off out.bmp

注意事项

  • Q1.9:为什么当搭载8G DDR时,RGA效率较于4G时性能下降严重?
    由于部分RGA1/RGA2的IOMMU仅支持最大32位的物理地址,而RGA Device Driver、RGA2 Device Driver中对于不满足硬件内存要求的调用申请,默认是通过swiotlb机制进行访问访问受限制的内存(原理上相当于通过CPU将高位内存拷贝至复合硬件要求的低位内存中,再交由硬件进行处理,处理完毕后再通过CPU将低位内存搬运回目标的高位内存上。)因此效率十分低下,通常在正常耗时的3-4倍之间浮动,并且引入受CPU负载影响。

  • “RGA_MMU unsupported Memory larger than 4G!”报错该如何解决?
    该报错通常对应HAL层报错:
    RgaBlit(1483) RGA_BLIT fail: Invalid argument
    Failed to call RockChipRga interface, please use ‘dmesg’ command to view driver error log.
    该报错标识当前配置的图像任务配置的内存无法满足当前匹配到的硬件核心对内存的要求,由于不同的硬件版本的RGA的IOMMU对内存位数的要求不同,当分配的内存超过对应硬件的限制时,则会出现该该报错,详细的不同硬件版本RGA的限制可见《Rockchip_Developer_Guide_RGA_CN》中的概述——设计指标小节。

    当出现该报错时,通常有以下几种场景以及对应的解决方案:

    在搭载多种RGA的芯片平台(例如RK3588搭载有2颗RGA3核心、1颗RGA2核心)上,没有使用importbuffer_xx接口获取handle,而是直接使用wrapbuffer_xx接口调用im2d api时:

    由于没有使用importbuffer_xx来提前映射外部内存到RGA驱动内存,因此在实际任务匹配中无法提前获知内存是否不满足对应核心的限制,因此在高负载场景下可能会出现该报错,建议使用importbuffer_xx提前将外部内存导入到RGA驱动内部,避免该问题。

    在搭载多种RGA的芯片平台(例如RK3588搭载有2颗RGA3核心、1颗RGA2核心)上,使用了importbuffer_xx接口获取handle,但是依旧存在该问题:

    可以检查一下配置的图像任务的参数,确认是否配置了仅有RGA2核心(内存访问受限制的核心)支持的功能或格式,以RK3588为例,color fill功能和YUV422/420 planar格式均是RGA2核心特有的功能和格式,因此该场景下必须分配4G以内内存空间的内存调用RGA。

    常见的分配4G内存方式可以查看以下示例代码:
    <librga_souce_path>/samples/allocator_demo/src/rga_allocator_dma32_demo.cpp
    <librga_souce_path>/samples/allocator_demo/src/rga_allocator_graphicbuffer_demo.cpp

    如果使用的其他分配器,例如mpp_buffer、v4l2_buffer、drm_buffer等,请查询对应分配器是否支持限制分配4G以内内存空间内存,并按照对应方式申请复合RGA硬件要求的内存。

    仅搭载一种RGA的芯片平台(例如仅搭载RGA2的RK3399、RK3568、Rk3566)上:

    当芯片平台上仅搭载内存访问受限制的核心时,则调用RGA时必须申请符合搭载核心对内存要求的内存,解决方案同上场景2。

    当使用DRM、malloc、new等不支持指定分配4G以内内存空间的内存的内存分配器时,也可以通过修改uboot的内存映射范围来解决。

    uboot相关修改可以参考SDK文档中 uboot开发文档->Chapter-8 调试手段->修改DDR容量 ,将内存映射范围全局限制在0~4G内存空间以内即可。

参考

  • librga github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/783891.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信平台上的AI绘画赚钱秘籍:十大创意服务让你轻松盈利(附教程)

在数字化浪潮中&#xff0c;AI绘画技术以其独特的魅力&#xff0c;为艺术创作带来了无限可能。微信&#xff0c;作为国内最大的社交平台之一&#xff0c;也为众多创业者提供了全新的赚钱机会。 一、定制专属头像&#xff0c;个性尽显无疑 在微信社交中&#xff0c;头像是展示…

【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会…

数学系C++(六七)

目录 * &指针与地址 void指针 指针可以等于&#xff1a; const 指向常量的指针 const int *px 常指针 int * const px 指向常量的常指针const 类型标识符 * const 指针名 指针加减&#xff1a; 指针恒等式 函数指针【待续】 指针型函数&#xff1a; 指向函数的…

01day C++初入学习

这里写目录标题 1.C区别于C的输入输出2.什么是命名空间3. namespace的定义namespace的使用(1)namespace嵌套使用(2)多⽂件中可以定义同名namespace(3) 4.命名空间的使用5.C输⼊&输出6.缺省参数7.函数重载8.引用8.1引用的特性8.3引用的使用 1.C区别于C的输入输出 #include&…

拉格朗日乘子法

拉格朗日乘子法 flyfish 拉格朗日乘子法是一种用于求解带约束优化问题的强有力工具。它通过引入新的变量&#xff08;拉格朗日乘子&#xff09;&#xff0c;将带约束的优化问题转换为无约束的优化问题&#xff0c;从而简化问题的求解过程。 假设我们有一个优化问题&#xff…

数据结构--二叉树相关例题4

运用到malloc函数&#xff0c;因为之前忘记它的使用方法&#xff0c;因此附加一个 动态内存管理&#xff08;前面内容中有讲解过&#xff09;的知识点 1.二叉树遍历 //二叉树遍历 //属于IO类型题有输入有输出//因为输入包括1行字符串&#xff0c;长度不超过100&#xff0c;所以…

复合机器人:手脚眼脑的完美结合

在现代工业制造的舞台上&#xff0c;复合机器人如同一位精密而高效的工匠&#xff0c;以其独特的手脚眼脑&#xff0c;正深刻改变着传统的生产方式。这些机器人不仅仅是机械臂的简单延伸&#xff0c;它们汇聚了先进的机械结构、智能的感知系统、精密的控制技术和灵活的思维能力…

VBA-计时器的数据进行整理

对计时器的数据进行整理 需求原始数据程序步骤VBA程序结果 需求 需要在txt文件中提取出分和秒分别在两列 原始数据 数据结构 计次7 00:01.855 计次6 00:09.028 计次5 00:08.586 计次4 00:08.865 计次3 00:07.371 计次2 00:06.192 计次1 00:05.949 程序步骤 1、利用Trim()去…

# Redis 入门到精通(一)数据类型(1)

Redis 入门到精通&#xff08;一&#xff09;数据类型&#xff08;1&#xff09; 一 、Redis 入门到精通 基本介绍 1、Redis 基础 ( windows 环境 ) redis 入门数据类型通用命令Jedis 2、Redis 高级 ( linux 环境 ) 持久化redis.conf 配置事务集群 3、Redis 应用 ( linux…

浏览器控制台打印日志的方法汇总

目录 console.table用法 打印数组 打印对象 打印数组对象 打印数组对象里的指定字段 console.count用法 不传参打印 传参打印 console.warn用法 打印文本 打印对象 console.error用法 打印文本 打印对象 console.assert用法 打印文本 打印对象 consol…

HCIA综合实验

学习新思想&#xff0c;争做新青年。今天学习的是HCIA综合实验&#xff01; 实验拓扑 实验需求 总部&#xff1a; 1、除了SW8 SW9是三层交换机&#xff0c;其他交换机均为2层交换机。 2、GW为总部的出口设备&#xff0c;使用单臂路由技术&#xff0c;VLAN10,20,100的网关都在GW…

写一个函数,返回参数二进制中 1 的个数

代码要求 输入一个整数n&#xff0c;输出该数32位二进制中为1的个数&#xff08;包括最高位的符号位&#xff09;&#xff0c;其中负数用补码表示 如&#xff1a;输入&#xff1a;15 &#xff08;15的二进制表示&#xff1a;0000 1111&#xff09; 输出&#xff1a;4 代码实…

生成式人工智能:开发者的得力助手还是职业威胁?

在过去的几年里&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;在软件开发领域引发了广泛关注。AI工具在代码生成、错误检测、自动化测试等方面的应用&#xff0c;正在迅速改变开发者的工作方式。AI究竟是在帮助开发者提高效率&#xff0c;还是在逐渐取代他们&#xf…

开个技术外挂|用技术轻松实现GPU显卡冷却风扇噪声控制

GPU显卡冷却风扇噪声分析 游戏玩家可能有这样的体验&#xff1a;当显卡卖力工作的时候&#xff0c;明显感觉到从机箱传来的噪声变大了。这是因为系统监测到芯片有过热风险&#xff0c;从而自动提升了冷却风扇的转速。 如下图所示&#xff0c;当GPU显卡处于 20C 时&#xff0c;风…

文心一言 VS 讯飞星火 VS chatgpt (298)-- 算法导论22.1 2题

二、给定一棵有 7 个结点的完全二叉树的邻接链表&#xff0c;请给出等价的邻接矩阵表示。这里假设结点的编号为从 1~7 。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在Go语言中&#xff0c;表示一棵完全二叉树的邻接矩阵首先需要理解完全二叉树的性质&#…

Python 处理Excel 文件, openpyxl 库的使用:

下载&#xff1a; pip install openpyxl 基本使用&#xff1a; 新建一个Excel 工作簿&#xff1a; 使用openpyxl 需要先导入一个Workbook 类&#xff0c; 使用它可以创建一个Workbook<工作簿>对象&#xff0c; 也就是创建一个Excel表文件&#xff0c; web.active 可用来…

数据结构——二叉树之c语言实现堆与堆排序

目录 前言&#xff1a; 1.二叉树的概念及结构 1.1 特殊的二叉树 1.2 二叉树的存储结构 1.顺序存储 2.链式存储 2. 二叉树的顺序结构及实现 2.1 堆的概念 ​编辑 2.2 堆的创建 3.堆的实现 3.1 堆的初始化和销毁 初始化&#xff1a; 销毁&#xff1a; 插入&…

C-10 凸包

凸包 数学定义 平面的一个子集S被称为是凸的&#xff0c;当且仅当对于任意两点A&#xff0c;B属于S&#xff0c;线段PS都完全属于S过于基础就不详细介绍了 凸包的计算 github上找到了别人的代码&#xff0c;用4种方式实现了凸包的计算&#xff0c;把他放在这里链接地址htt…

LibreOffice的国内镜像安装地址和node.js国内快速下载网站

文章目录 1、LibreOffice1.1、LibreOffice在application-conf.yml中的配置2、node.js 1、LibreOffice 国内镜像包网址&#xff1a;https://mirrors.cloud.tencent.com/libreoffice/libreoffice/ 1.1、LibreOffice在application-conf.yml中的配置 jodconverter:local:enable…

平安消保在行动 | 守护每一个舒心笑容 不负每一场双向奔赴

“要时刻记得以消费者为中心&#xff0c;把他们当做自己的朋友&#xff0c;站在他们的角度去思考才能更好地解决问题。” 谈及如何成为一名合格的消费者权益维护工作人员&#xff0c;平安养老险深圳分公司负责咨诉工作的庞宏霄认为&#xff0c;除了要具备扎实的专业技能和沟通…