Commit c8984e1f authored by hebohua's avatar hebohua

pt2 support qpmap

parent 02739e2a
Pipeline #60 failed with stages
...@@ -155,7 +155,7 @@ ...@@ -155,7 +155,7 @@
&i2c0PL { &i2c0PL {
clock-frequency = <10000>; clock-frequency = <10000>;
/*sa8900_0: codec@1a{ sa8900_0: codec@1a{
compatible = "microbt,sa8900"; compatible = "microbt,sa8900";
pinctrl-names = "default"; pinctrl-names = "default";
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
...@@ -164,38 +164,20 @@ ...@@ -164,38 +164,20 @@
spk-ctrl = <0>; spk-ctrl = <0>;
powerup-gpios = <&portd 1 GPIO_ACTIVE_HIGH>; powerup-gpios = <&portd 1 GPIO_ACTIVE_HIGH>;
dacclk-sel = <0>; //0:dacclk=adcclk 1:dacclk=dacclk/adcclk=adcclk dacclk-sel = <0>; //0:dacclk=adcclk 1:dacclk=dacclk/adcclk=adcclk
};*/ };
}; };
&i2c2ACME { &i2c2ACME {
clock-frequency = <100000>; /*i2c 100k*/ clock-frequency = <10000>;
scl-gpios = <&portf 1 GPIO_ACTIVE_HIGH>; scl-gpios = <&portf 1 GPIO_ACTIVE_HIGH>;
sda-gpios = <&portf 2 GPIO_ACTIVE_HIGH>; sda-gpios = <&portf 2 GPIO_ACTIVE_HIGH>;
es8388_2: es8388@10 {
status = "okay";
#sound-dai-cells = <0>;
compatible = "everest,es8388";
reg = <0x10>;
clocks = <&clock I2S1_MCLK>;
clock-names = "mclk";
clock-frequency = <8192000>;
pinctrl-0 = <&pinctrl_i2s1_mclk_pmux>;
pinctrl-names = "default";
spk-en-gpios = <&portf 14 GPIO_ACTIVE_LOW>;
};
}; };
&i2s0_clk { &i2s0_clk {
clock-frequency = <24000000>; clock-frequency = <12288000>;
};
&i2s1_clk {
clock-frequency = <8192000>;
}; };
&i2s0PL{ &i2s1ACME {
status = "disabled"; status = "disabled";
}; };
...@@ -204,18 +186,14 @@ ...@@ -204,18 +186,14 @@
simple-audio-card,frame-master = <&i2s0_dailink_master>; simple-audio-card,frame-master = <&i2s0_dailink_master>;
simple-audio-card,format = "i2s"; simple-audio-card,format = "i2s";
simple-audio-card,cpu { simple-audio-card,cpu {
sound-dai = <&i2s1ACME>; sound-dai = <&i2s0PL>;
}; };
i2s0_dailink_master:simple-audio-card,codec { i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&es8388_2>; sound-dai = <&sa8900_0>;
clocks = <&i2s1_clk>; clocks = <&i2s0_clk>;
clock-names = "mclk"; clock-names = "mclk";
}; };
/*i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&pdm_codec>;
};*/
}; };
&sound_pdm{ &sound_pdm{
...@@ -234,7 +212,3 @@ ...@@ -234,7 +212,3 @@
}; };
}; };
}; };
&i2c3ACME {
status = "disabled";
};
\ No newline at end of file
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
}; };
chosen { chosen {
bootargs = "console=ttyS2,115200 mem=64M quiet"; bootargs = "console=ttyS2,115200 mem=96M quiet";
stdout-path = "serial2:115200n8"; stdout-path = "serial2:115200n8";
}; };
...@@ -156,7 +156,7 @@ ...@@ -156,7 +156,7 @@
&i2c0PL { &i2c0PL {
clock-frequency = <10000>; clock-frequency = <10000>;
sa8900_0: codec@1a{ /*sa8900_0: codec@1a{
compatible = "microbt,sa8900"; compatible = "microbt,sa8900";
pinctrl-names = "default"; pinctrl-names = "default";
#sound-dai-cells = <0>; #sound-dai-cells = <0>;
...@@ -165,20 +165,38 @@ ...@@ -165,20 +165,38 @@
spk-ctrl = <0>; spk-ctrl = <0>;
powerup-gpios = <&portd 1 GPIO_ACTIVE_HIGH>; powerup-gpios = <&portd 1 GPIO_ACTIVE_HIGH>;
dacclk-sel = <0>; //0:dacclk=adcclk 1:dacclk=dacclk/adcclk=adcclk dacclk-sel = <0>; //0:dacclk=adcclk 1:dacclk=dacclk/adcclk=adcclk
}; };*/
}; };
&i2c2ACME { &i2c2ACME {
clock-frequency = <10000>; clock-frequency = <100000>; /*i2c 100k*/
scl-gpios = <&portf 1 GPIO_ACTIVE_HIGH>; scl-gpios = <&portf 1 GPIO_ACTIVE_HIGH>;
sda-gpios = <&portf 2 GPIO_ACTIVE_HIGH>; sda-gpios = <&portf 2 GPIO_ACTIVE_HIGH>;
es8388_2: es8388@10 {
status = "okay";
#sound-dai-cells = <0>;
compatible = "everest,es8388";
reg = <0x10>;
clocks = <&clock I2S1_MCLK>;
clock-names = "mclk";
clock-frequency = <8192000>;
pinctrl-0 = <&pinctrl_i2s1_mclk_pmux>;
pinctrl-names = "default";
spk-en-gpios = <&portf 14 GPIO_ACTIVE_LOW>;
};
}; };
&i2s0_clk { &i2s0_clk {
clock-frequency = <12288000>; clock-frequency = <24000000>;
};
&i2s1_clk {
clock-frequency = <8192000>;
}; };
&i2s1ACME { &i2s0PL{
status = "disabled"; status = "disabled";
}; };
...@@ -187,14 +205,18 @@ ...@@ -187,14 +205,18 @@
simple-audio-card,frame-master = <&i2s0_dailink_master>; simple-audio-card,frame-master = <&i2s0_dailink_master>;
simple-audio-card,format = "i2s"; simple-audio-card,format = "i2s";
simple-audio-card,cpu { simple-audio-card,cpu {
sound-dai = <&i2s0PL>; sound-dai = <&i2s1ACME>;
}; };
i2s0_dailink_master:simple-audio-card,codec { i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&sa8900_0>; sound-dai = <&es8388_2>;
clocks = <&i2s0_clk>; clocks = <&i2s1_clk>;
clock-names = "mclk"; clock-names = "mclk";
}; };
/*i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&pdm_codec>;
};*/
}; };
&sound_pdm{ &sound_pdm{
...@@ -210,6 +232,10 @@ ...@@ -210,6 +232,10 @@
conf { conf {
pins = "PORTE1"; pins = "PORTE1";
drive-strength = <1>; drive-strength = <1>;
}; };
}; };
};
&i2c3ACME {
status = "disabled";
}; };
\ No newline at end of file
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
#define FINSH_USING_MSH #define FINSH_USING_MSH
#define FINSH_THREAD_NAME "tshell" #define FINSH_THREAD_NAME "tshell"
#define FINSH_THREAD_PRIORITY 20 #define FINSH_THREAD_PRIORITY 20
#define FINSH_THREAD_STACK_SIZE 4096 #define FINSH_THREAD_STACK_SIZE 2048
#define FINSH_USING_HISTORY #define FINSH_USING_HISTORY
#define FINSH_HISTORY_LINES 5 #define FINSH_HISTORY_LINES 5
#define FINSH_USING_SYMTAB #define FINSH_USING_SYMTAB
...@@ -287,33 +287,32 @@ ...@@ -287,33 +287,32 @@
#define BSP_USING_PWM5 #define BSP_USING_PWM5
#define BSP_USING_PWM6 #define BSP_USING_PWM6
#define BSP_USING_PWM7 #define BSP_USING_PWM7
#define BSP_USING_PWM10
#define BSP_USING_PWM11
#define BSP_USING_I2C #define BSP_USING_I2C
#define BSP_USING_I2C0 #define BSP_USING_I2C0
#define BSP_USING_I2C1 #define BSP_USING_I2C1
#define BSP_USING_I2C2
#define BSP_USING_I2C3
#define SA_I2C_TEST
#define BSP_USING_STAR #define BSP_USING_STAR
#define BSP_USING_WDT #define BSP_USING_WDT
#define BSP_MOUDLE_WITHIN_WDT #define BSP_MOUDLE_WITHIN_WDT
#define BSP_USING_DMAC #define BSP_USING_DMAC
#define BSP_USING_MAILBOX #define BSP_USING_MAILBOX
#define BSP_USING_NANO_FILTER #define BSP_USING_NANO_FILTER
#define PWM_ID_WL 10 #define PWM_ID_WL 1
#define PWM_ID_IR 11 #define PWM_ID_IR -1
#define IRCUT_DRV_EN_PIN 89
#define IRCUT_DRV_SPI_CSN_PIN 86
#define SNS_OS04D10 #define SNS_OS04D10
#define SNS_OS04L10 #define BSP_USING_SNS_RST_PIN 27
#define BSP_USING_SNS_RST_PIN 5
#define ICR_CTRL_SPI_TM8150B
#define IRCUT_DRV_EN_PIN 0
#define IRCUT_DRV_SPI_CSN_PIN 0
#define BSP_USING_SPI #define BSP_USING_SPI
#define BSP_USING_PIN #define BSP_USING_PIN
#define BSP_USE_TESTMODULE
/* Board extended module Drivers */ /* Board extended module Drivers */
#define BSP_USING_RPMSG #define BSP_USING_RPMSG
#define BSP_USING_PMIC
#define PMIC_SA9710
#define BSP_TEST_PMIC
#define DEFAULT_SELECT #define DEFAULT_SELECT
/* sa692x ext Config */ /* sa692x ext Config */
...@@ -323,7 +322,8 @@ ...@@ -323,7 +322,8 @@
#define SA_USEING_LISTENING_PROCEE #define SA_USEING_LISTENING_PROCEE
#define RT_USING_CPU_USAGE #define RT_USING_CPU_USAGE
#define BSP_USING_SIMPLE_CMD #define BSP_USING_SIMPLE_CMD
#define BOARD_PLATFORM 1 #define BOARD_PLATFORM 3
#define BOOT_FROM_SFC #define BOOT_FROM_SFC
#define A55_USING_QSPI
#endif #endif
...@@ -6,28 +6,37 @@ ...@@ -6,28 +6,37 @@
### 2.1 配置mcu与A55工具链的环境变量 ### 2.1 配置mcu与A55工具链的环境变量
例如: 例如:
export PATH=$PATH:/opt/uclibc-ng/v1.2/arm-microbt-linux-uclibcgnueabihf/bin/ export PATH=$PATH:/opt/uclibc-ng/v1.2/arm-microbt-linux-uclibcgnueabihf/bin/; export CROSS_COMPILE=/opt/uclibc-ng/v1.2/arm-microbt-linux-uclibcgnueabihf/bin/arm-microbt-linux-uclibcgnueabihf-; export RTT_EXEC_PATH=/opt/gcc-arm-none-eabi-10.3-2021.10/bin
export CROSS_COMPILE=/opt/uclibc-ng/v1.2/arm-microbt-linux-uclibcgnueabihf/bin/arm-microbt-linux-uclibcgnueabihf-
export RTT_EXEC_PATH=/opt/gcc-arm-none-eabi-10.3-2021.10/bin
### 2.2 编译
a、编译普通版本 export PATH=$PATH:~/microbt_gcc/arm-microbt-linux-uclibcgnueabihf/bin/; export CROSS_COMPILE=~/microbt_gcc/arm-microbt-linux-uclibcgnueabihf/bin/arm-microbt-linux-uclibcgnueabihf-; export RTT_EXEC_PATH=~/microbt_gcc/gcc-arm-none-eabi-10.3-2021.10/bin
./run.sh 编译所有版本
./run.sh clean 清除所有版本 ### 2.2 编译
./run.sh clean 清除所有版本
./run.sh emmc 编译所有emmc版本 ./run.sh qa 编译所有emmc 和pt2 版本,运行结束 burn_img_emmc 目录会有对应产物生成。
./run.sh nor 编译所有norflash版本
./run.sh outdoor-ipc 编译IPC类版本 编译动态库或sample
在同一个终端,先执行 2.1 所示配置编译工具链的命令,再cd 命令进入有 export.sh 的代码目录,比如 sdk/opensource/source 或 sdk/sample/source,执行命令: source export.sh
再 cd 命令进入需要编译的 so 或sample 代码 Makefile 所在目录,比如 sdk/opensource/source/hapi 或 sdk/sample/source/sample_vpu,执行 make 命令即可快速编译。
生成的 so 或 bin 在 Makefile 当前目录
./run.sh glasses 编译眼镜类版本
### 2.3 编译报错
WSL ubuntu22.04 编译报如下错:
/bin/sh: 1: pushd: not found
/bin/sh: 2: scons: not found
/bin/sh: line 1: flex: command not found
/bin/sh: line 1: bison: command not found
此外还有一些缺头文件和python库的错,解决方法如下:
1、执行sudo dpkg-reconfigure dash 命令,将dash设置为No。
2、sudo apt-get update; sudo apt-get install scons flex bison libssl-dev libgmp-dev libmpc-dev lz4
3、sudo apt-get install python3-pip; pip3 install --user pycryptodome
4、wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz; tar -xzf openssl-1.1.1t.tar.gz; cd openssl-1.1.1t
5、./config --prefix=/usr/local/openssl-1.1.1t --openssldir=/usr/local/openssl-1.1.1t shared zlib; make; sudo make install
6、sudo ln -s /usr/local/openssl-1.1.1t/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1; sudo ln -s /usr/local/openssl-1.1.1t/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1; sudo ldconfig
b、编译ota版本
./run_ota.sh
运行结束 burn_img_nor 目录会有对应产物生成,其中编译OTA版本时会有对应版本号的OTA BIN文件生成。
...@@ -26,14 +26,14 @@ copy_files() { ...@@ -26,14 +26,14 @@ copy_files() {
mkdir -p burn_img_nor mkdir -p burn_img_nor
cp 6920_bsp_release/out_images/bootimg-XIP-6920E-0P55-glasses-linux.bin burn_img_nor/ cp 6920_bsp_release/out_images/bootimg-XIP-6920E-0P55-glasses-linux.bin burn_img_nor/
cp common/partition/glasses_partition.txt burn_img_nor/ cp common/partition/glasses_partition.txt burn_img_nor/
fi fi
if [ "$type" == "outdoor-ipc" ]; then if [ "$type" == "outdoor-ipc" ]; then
echo "Copying ipc files..." echo "Copying ipc files..."
mkdir -p burn_img_nor mkdir -p burn_img_nor
cp 6920_bsp_release/out_images/bootimg-XIP-6920E-0P55-outdoor-ipc-linux.bin burn_img_nor/ cp 6920_bsp_release/out_images/bootimg-XIP-6920E-0P55-outdoor-ipc-linux.bin burn_img_nor/
cp common/partition/outdoor_ipc_partition.txt burn_img_nor/ cp common/partition/outdoor_ipc_partition.txt burn_img_nor/
fi fi
} }
rootfs_copy_file() { rootfs_copy_file() {
...@@ -72,6 +72,7 @@ rootfs_copy_file() { ...@@ -72,6 +72,7 @@ rootfs_copy_file() {
if [ "$type" == "qa" ];then if [ "$type" == "qa" ];then
echo *****ONLY TEST**** echo *****ONLY TEST****
cp sdk/lib/libArcEncCam*.so system_temp/lib/
cp sdk/lib/libsvp_*.so system_temp/lib/ cp sdk/lib/libsvp_*.so system_temp/lib/
cp sdk/conf system_temp/ -r cp sdk/conf system_temp/ -r
cp common/conf/* system_temp/conf/ -rf cp common/conf/* system_temp/conf/ -rf
...@@ -157,7 +158,7 @@ if [ "$1" == "glasses" ] || [ "$1" == "outdoor-ipc" ] || [ "$1" == "emmc" ]; the ...@@ -157,7 +158,7 @@ if [ "$1" == "glasses" ] || [ "$1" == "outdoor-ipc" ] || [ "$1" == "emmc" ]; the
set +e set +e
elif [ "$1" == "clean" ]; then elif [ "$1" == "clean" ]; then
echo "Running make clean..." echo "Running make clean..."
rm -rf 6920_bsp_release/linux/rootfs/ rm -rf ../6920_bsp_release/linux/rootfs/
rm -rf ../burn_img_nor rm -rf ../burn_img_nor
rm -rf ../burn_img_emmc rm -rf ../burn_img_emmc
rm -rf ../system_temp rm -rf ../system_temp
...@@ -187,7 +188,7 @@ copy_files "$1" ...@@ -187,7 +188,7 @@ copy_files "$1"
mkdir system_temp/lib/modules -p mkdir system_temp/lib/modules -p
mkdir system_temp/usr -p mkdir system_temp/usr -p
if [ -d "tools" ]; then if [ -d "tools" ]; then
# Get new controller # Get new controller
make_module tools/controller/ controller sdk/bin/ make_module tools/controller/ controller sdk/bin/
make_module tools/comm/ libtool_comm.so sdk/opensource/lib/ make_module tools/comm/ libtool_comm.so sdk/opensource/lib/
...@@ -220,6 +221,8 @@ copy_files "$1" ...@@ -220,6 +221,8 @@ copy_files "$1"
cp -d sdk/lib/libsvp_vnne.so system_temp/lib/ cp -d sdk/lib/libsvp_vnne.so system_temp/lib/
cp -d sdk/lib/libsvp_yolox.so system_temp/lib/ cp -d sdk/lib/libsvp_yolox.so system_temp/lib/
cp sdk/lib/libArcEncCam*.so system_temp/lib/
cp sdk/opensource/lib/libhapi_open.so* system_temp/lib/ cp sdk/opensource/lib/libhapi_open.so* system_temp/lib/
cp sdk/opensource/lib/libimu_open.so* system_temp/lib/ cp sdk/opensource/lib/libimu_open.so* system_temp/lib/
cp sdk/opensource/lib/libjson_open.so* system_temp/lib/ cp sdk/opensource/lib/libjson_open.so* system_temp/lib/
...@@ -315,14 +318,14 @@ copy_files "$1" ...@@ -315,14 +318,14 @@ copy_files "$1"
cp sdk/lib/modules/vnne.ko system_temp/lib/modules/ cp sdk/lib/modules/vnne.ko system_temp/lib/modules/
cp sdk/lib/modules/vpss.ko system_temp/lib/modules/ cp sdk/lib/modules/vpss.ko system_temp/lib/modules/
cp common/lib/libbacktrace.so* system_temp/lib/ cp common/lib/libbacktrace.so* system_temp/lib/
cp ./6920_bsp_release/linux/rootfs/lib/ld-uClibc* system_temp/lib/ cp ./6920_bsp_release/linux/rootfs/lib/ld-uClibc* system_temp/lib/
cp ./6920_bsp_release/linux/rootfs/lib/libc.so* system_temp/lib/ cp ./6920_bsp_release/linux/rootfs/lib/libc.so* system_temp/lib/
cp ./6920_bsp_release/linux/rootfs/lib/libgcc_s.so* system_temp/lib/ cp ./6920_bsp_release/linux/rootfs/lib/libgcc_s.so* system_temp/lib/
cp ./6920_bsp_release/linux/rootfs/lib/libatomic.so.* system_temp/lib/ cp ./6920_bsp_release/linux/rootfs/lib/libatomic.so.* system_temp/lib/
cp ./6920_bsp_release/linux/rootfs_acme/lib/librpmsg.so system_temp/lib/ cp ./6920_bsp_release/linux/rootfs_acme/lib/librpmsg.so system_temp/lib/
cp sdk/sample/source/lib/libicr.so system_temp/lib/ cp sdk/sample/source/lib/libicr.so system_temp/lib/
cp sdk/sample/source/lib/libsd_algo.so system_temp/lib/ cp sdk/sample/source/lib/libsd_algo.so system_temp/lib/
cp sdk/sample/source/lib/libsmartLamp.so system_temp/lib/ cp sdk/sample/source/lib/libsmartLamp.so system_temp/lib/
...@@ -332,7 +335,7 @@ copy_files "$1" ...@@ -332,7 +335,7 @@ copy_files "$1"
cp sdk/bin/controller system_temp/bin/ cp sdk/bin/controller system_temp/bin/
cp sdk/bin/HeronTest system_temp/bin/ cp sdk/bin/HeronTest system_temp/bin/
cp sdk/bin/logo256x128.2bpp system_temp/bin/ cp sdk/bin/logo256x128.2bpp system_temp/bin/
cp sdk/bin/logo256x128.bgra system_temp/bin/ cp sdk/bin/logo256x128.bgra system_temp/bin/
cp sdk/bin/sample_cli system_temp/bin/ cp sdk/bin/sample_cli system_temp/bin/
cp sdk/bin/simhei.ttf system_temp/bin/ cp sdk/bin/simhei.ttf system_temp/bin/
cp sdk/bin/tzc400 system_temp/bin/ cp sdk/bin/tzc400 system_temp/bin/
...@@ -351,15 +354,16 @@ copy_files "$1" ...@@ -351,15 +354,16 @@ copy_files "$1"
make clean make clean
make make
cd - cd -
cd sdk/sample/source/sample_hapi_media/ # cd sdk/sample/source/sample_hapi_media/
make clean # make clean
make # make
cd - # cd -
set +e set +e
git checkout sdk/sample/source/mkconfig git checkout sdk/sample/source/mkconfig
mv sdk/sample/source/sample_hapi_streamer/sample_hapi_streamer system_temp/bin/streamer_ipc mv sdk/sample/source/sample_hapi_streamer/sample_hapi_streamer system_temp/bin/streamer_ipc
cp sdk/sample/source/sample_hapi_media/sample_hapi_media system_temp/bin/streamer_media # cp sdk/sample/source/sample_hapi_media/sample_hapi_media system_temp/bin/streamer_media
cp sdk/bin/ipc_*.json system_temp/bin/ cp sdk/sample/source/lib/libArcEncCam*.so system_temp/lib/
cp sdk/bin/ipc_*.json system_temp/bin/
cp system/configs system_temp/ -r cp system/configs system_temp/ -r
cp system/usr/* system_temp/usr/ -rf cp system/usr/* system_temp/usr/ -rf
...@@ -372,7 +376,7 @@ copy_files "$1" ...@@ -372,7 +376,7 @@ copy_files "$1"
# Use liblapi. so. 2.5.0.19 because the voltage needs to be configured to 0.5V # Use liblapi. so. 2.5.0.19 because the voltage needs to be configured to 0.5V
#cp common/lib/liblapi.so.2.5.0.1.9 system_temp/lib/liblapi.so.2.5.0.1.7 -rf #cp common/lib/liblapi.so.2.5.0.1.9 system_temp/lib/liblapi.so.2.5.0.1.7 -rf
cd system_temp/lib/ cd system_temp/lib/
# rm libfdk-aac.so # rm libfdk-aac.so
# ln -s libfdk-aac.so.* libfdk-aac.so # ln -s libfdk-aac.so.* libfdk-aac.so
...@@ -387,7 +391,7 @@ copy_files "$1" ...@@ -387,7 +391,7 @@ copy_files "$1"
rm libvqe.so rm libvqe.so
ln -s libvqe.so.* libvqe.so ln -s libvqe.so.* libvqe.so
cd - cd -
cp sdk/scripts system_temp/ -rf cp sdk/scripts system_temp/ -rf
cp common/bin/* system_temp/bin/ -rf cp common/bin/* system_temp/bin/ -rf
......
{ {
"doc": "lite", "doc": "lite",
"version": "1.0.1.1", "version": "1.0.1.1",
"#note": [ "#note": [
"workmode: trigger, deepsleep, aor, normal, hibernate", "workmode: trigger, deepsleep, aor, normal, hibernate",
"scene: record, play, talk, record_play, trigger", "scene: record, play, talk, record_play, trigger",
"soundmode: mono, stereo", "soundmode: mono, stereo",
...@@ -24,45 +24,45 @@ ...@@ -24,45 +24,45 @@
"video": { "video": {
"enable": 1, "enable": 1,
"vin": [ "vin": [
{ {
"enable": 1, "devid": 0, "sensor": "4d10", "imgmode": "linear", "smartae": 1, "mirror": 0, "flip": 0, "dumpyuv": 0, "dumpraw": 0, "enable": 1, "devid": 0, "sensor": "4d10", "imgmode": "linear", "smartae": 1, "mirror": 0, "flip": 0, "dumpyuv": 0, "dumpraw": 0,
"maxfps": 15.0, "minfps": 5.0, "maxexptime": 200000, "sd": 1, "flickerEnable": 0, "flickerFrequency": 50, "rotation": 0, "maxfps": 15.0, "minfps": 5.0, "maxexptime": 200000, "sd": 1, "flickerEnable": 0, "flickerFrequency": 50, "rotation": 0,
"eisMode": 0, "gdc": 0, "eisMode": 0, "gdc": 0,
"ispfile": [ "/acme/conf/4d10/os04d10_base_Color.bin","/acme/conf/4d10/os04d10_4M_Color_Outdoor_diff.bin", "/acme/conf/4d10/os04d10_4M_Color_Indoor_diff.bin", "/acme/conf/4d10/os04d10_4M_Color_Aisp_diff.bin", "/acme/conf/4d10/os04d10_4M_Black_diff.bin","/acme/conf/4d10/os04d10_4M_Color_Aisp_diff_Light.bin" ], "ispfile": [ "/acme/conf/4d10/os04d10_base_Color.bin","/acme/conf/4d10/os04d10_4M_Color_Outdoor_diff.bin", "/acme/conf/4d10/os04d10_4M_Color_Indoor_diff.bin", "/acme/conf/4d10/os04d10_4M_Color_Aisp_diff.bin", "/acme/conf/4d10/os04d10_4M_Black_diff.bin","/acme/conf/4d10/os04d10_4M_Color_Aisp_diff_Light.bin" ],
"algfile": "/acme/conf/4d10/aisp_4M.bin" "algfile": "/acme/conf/4d10/aisp_4M.bin"
} }
], ],
"venc": [ "venc": [
{ {
"enable": 1, "devid": 0, "channel": 0, "smartrc": 1, "smartsei": 1, "enable": 1, "devid": 0, "channel": 0, "smartrc": 1, "smartsei": 1,
"format": "h265", "width": 2560, "height": 1440, "rcmode": "vbr", "bitrate": 1024000, "format": "h265", "width": 2560, "height": 1440, "rcmode": "arcbr", "bitrate": 1024000,
"region": [ "region": [
{ {
"enable": 1, "osd": "image", "enable": 0, "osd": "image",
"rect": { "x": 32, "y": 32, "width": 256, "height": 128 }, "rect": { "x": 32, "y": 32, "width": 256, "height": 128 },
"color": [ 16777215, 6171602, 16745541 ], "color": [ 16777215, 6171602, 16745541 ],
"file": "/acme/bin/logo256x128.2bpp" "file": "/acme/bin/logo256x128.2bpp"
}, },
{ {
"enable": 1, "osd": "time", "enable": 0, "osd": "time",
"rect": { "x": 1728, "y": 1344, "width": 800, "height": 64 }, "rect": { "x": 1728, "y": 1344, "width": 800, "height": 64 },
"color": [ 16777215, 6171602, 16745541 ] "color": [ 16777215, 6171602, 16745541 ]
} }
] ]
}, },
{ {
"enable": 0, "devid": 0, "channel": 1, "smartrc": 1, "smartsei": 1, "enable": 0, "devid": 0, "channel": 1, "smartrc": 1, "smartsei": 1,
"format": "h265", "width": 1280, "height": 720, "rcmode": "cbr", "bitrate": 1024000, "format": "h265", "width": 1280, "height": 720, "rcmode": "cbr", "bitrate": 1024000,
"region": [ "region": [
{ {
"enable": 1, "osd": "image", "enable": 1, "osd": "image",
"rect": { "x": 32, "y": 32, "width": 256, "height": 128 }, "rect": { "x": 32, "y": 32, "width": 256, "height": 128 },
"color": [ 16777215, 6171602, 16745541 ], "color": [ 16777215, 6171602, 16745541 ],
"file": "/acme/bin/logo256x128.2bpp" "file": "/acme/bin/logo256x128.2bpp"
}, },
{ {
"enable": 1, "osd": "time", "enable": 1, "osd": "time",
"rect": { "x": 448, "y": 624, "width": 800, "height": 64 }, "rect": { "x": 448, "y": 624, "width": 800, "height": 64 },
"color": [ 16777215, 6171602, 16745541 ] "color": [ 16777215, 6171602, 16745541 ]
} }
] ]
......
#ifndef _ENCODER_ARC_H
#define _ENCODER_ARC_H
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#include <sys/time.h>
#include <stdint.h>
//#include "sa_comm.h"
//#include "sa_comm_venc.h"
//#include "sa_hapi_scene.h"
#define MPP_ALIGN(x, a) (((x)+(a)-1)&~((a)-1))
#define MPP_ALIGN_DOWN(x, a) ((x) & ~((a)-1))
#define ARC_DIV_CEIL(x, y) (((x) + (y) - 1) / (y))
typedef struct{
signed char qp : 6;
unsigned char force_intra : 1;
unsigned char force_skip : 1;
}qp_map_cu_t;
typedef struct{
signed int qp : 8;
unsigned int force_intra : 1;
unsigned int force_skip : 1;
unsigned int dc_only : 1;
unsigned int : 5;
unsigned int min_blk_size : 3;
unsigned int : 1;
unsigned int max_blk_size : 3;
unsigned int : 1;
unsigned int lambda_factor : 8;
qp_map_cu_t block32[4];
qp_map_cu_t block16[16];
unsigned char res[8]; // for byte align
}h265_qp_map_lcu_t;
typedef struct{
signed int qp : 8;
unsigned int force_intra : 1;
unsigned int force_skip : 1;
unsigned int dc_only : 1;
unsigned int : 5;
unsigned int min_blk_size : 3;
unsigned int : 1;
unsigned int max_blk_size : 3;
unsigned int : 1;
unsigned int lambda_factor : 8;
}h264_qp_map_lcu_t;
typedef struct tagArc_encPara {
int Width;
int Height;
int encType;
int targetBitrate; //bps
int targetmaxBitrate; //bps
int gopLen;
int viLen;
int i_fps_num;
int i_fps_den;
int quality_level;
int pcbt_enable;
int reserved[10];
} Arc_encPara;
typedef struct _ARC_VIDEO_SVP_TARGET {
unsigned int u32Type; // 目标类型
float f32Confidence; // 置信度
float f32StartX; // 目标位置
float f32StartY; // 目标位置
float f32EndX; // 目标位置
float f32EndY; // 目标位置
} ARC_VIDEO_SVP_TARGET;
typedef struct _ARC_VIDEO_SVP_DETECT_TARGETS {
unsigned int u32Seq; // 帧号
unsigned int u32TargetNum; // 目标个数
ARC_VIDEO_SVP_TARGET stTargets[8]; // 目标属性
} ARC_VIDEO_SVP_DETECT_TARGETS;
//typedef struct _ARC_VIDEO_FRAME_INFO_S
//{
// unsigned int u32Width;
// unsigned int u32Height;
// unsigned int u32Stride[3];
// void* pVirAddr[3];
//}ARC_VIDEO_FRAME_INFO_S;
#ifdef __cplusplus
extern "C" {
#endif
int Arc_enc_setconfig(char *modle_path);//暂时不需使用
void* Arc_enc_init(Arc_encPara* encPara);
int Arc_enc_deinit(void* handle);
int Arc_enc_rc_start(void* handle, int u32VencChn, unsigned char* pQpMap, unsigned int u32QpMapBufLen, int u32EncWidth, int u32EncHeight, int isHevc, void* pYuvAddr, int* stride, ARC_VIDEO_SVP_DETECT_TARGETS* stSvpDetectTargets);
void Arc_enc_rc_end(void* handle, unsigned int packet_len, int bkeyFrame);
void version_1_0_0_5();
#ifdef __cplusplus
}
#endif
#endif
...@@ -56,6 +56,8 @@ typedef enum saVENC_RC_QPMAP_MODE_E { ...@@ -56,6 +56,8 @@ typedef enum saVENC_RC_QPMAP_MODE_E {
VENC_RC_QPMAP_MODE_ABSOLUTE = 0, VENC_RC_QPMAP_MODE_ABSOLUTE = 0,
VENC_RC_QPMAP_MODE_RELATIVE_ROI, /* The QP table will be parsed as relative values (DeltaQP). The ROI requires this */ VENC_RC_QPMAP_MODE_RELATIVE_ROI, /* The QP table will be parsed as relative values (DeltaQP). The ROI requires this */
VENC_RC_QPMAP_MODE_ABSOLUTE_ROI, /* The QP table will be parsed as absolute values, overriding the rate-control-determined QP. */ VENC_RC_QPMAP_MODE_ABSOLUTE_ROI, /* The QP table will be parsed as absolute values, overriding the rate-control-determined QP. */
VENC_RC_QPMAP_MODE_RELATIVE_LOADQP, /* The QP table will be parsed as relative values (DeltaQP). The LOAD QP requires this */
VENC_RC_QPMAP_MODE_ABSOLUTE_LOADQP, /* The QP table will be parsed as absolute values, overriding the rate-control-determined QP. */
VENC_RC_QPMAP_MODE_BUTT VENC_RC_QPMAP_MODE_BUTT
} VENC_RC_QPMAP_MODE_E; } VENC_RC_QPMAP_MODE_E;
......
...@@ -359,6 +359,14 @@ typedef struct saVENC_WORK_MODE_INFO{ ...@@ -359,6 +359,14 @@ typedef struct saVENC_WORK_MODE_INFO{
VENC_WORK_MODE_CH_INFO stJpeg[VENC_MAX_JPEG_CHN_NUM]; VENC_WORK_MODE_CH_INFO stJpeg[VENC_MAX_JPEG_CHN_NUM];
}VENC_WORK_MODE_INFO; }VENC_WORK_MODE_INFO;
typedef struct saVENC_QPMAP_LCU_S {
SA_S32 s32NumQPPerLCU;
SA_S32 s32NumBytesPerLCU;
SA_S32 s32NumLCUs;
SA_S32 s32QPTableDepth;
} VENC_QPMAP_LCU_S;
typedef struct saSEI_USERDATA_S typedef struct saSEI_USERDATA_S
{ {
SA_U8* pUserData; SA_U8* pUserData;
...@@ -371,11 +379,19 @@ typedef struct saVIDEO_SEI_S ...@@ -371,11 +379,19 @@ typedef struct saVIDEO_SEI_S
SA_U32 u32PayloadNum; SA_U32 u32PayloadNum;
} VIDEO_SEI_S; } VIDEO_SEI_S;
typedef struct saUSER_RC_INFO_S
{
SA_BOOL bQpMapValid;
SA_U64 u64QpMapPhyAddr;
SA_U8 ATTRIBUTE* pu8QpmapVirAddr;
} USER_RC_INFO_S;
typedef struct saUSER_FRAME_INFO_S typedef struct saUSER_FRAME_INFO_S
{ {
VIDEO_FRAME_INFO_S stFrameInfo; VIDEO_FRAME_INFO_S stFrameInfo;
VENC_ROI_ATTR_S *pstRoiAttr; VENC_ROI_ATTR_S *pstRoiAttr;
VIDEO_SEI_S stSei; VIDEO_SEI_S stSei;
USER_RC_INFO_S stUserRcInfo;
} USER_FRAME_INFO_S; } USER_FRAME_INFO_S;
typedef struct saJPEG_SINGLE_FRAME_INFO_S typedef struct saJPEG_SINGLE_FRAME_INFO_S
......
...@@ -61,6 +61,10 @@ SA_S32 SA_MAPI_VENC_GetFrameInfo(VENC_CHN VeChn, VIDEO_FRAME_INFO_S *stFrmInfo); ...@@ -61,6 +61,10 @@ SA_S32 SA_MAPI_VENC_GetFrameInfo(VENC_CHN VeChn, VIDEO_FRAME_INFO_S *stFrmInfo);
* @note * @note
*/ */
SA_S32 SA_MAPI_VENC_SendFrame(VENC_CHN VeChn, const VIDEO_FRAME_INFO_S *pstFrameInfo); SA_S32 SA_MAPI_VENC_SendFrame(VENC_CHN VeChn, const VIDEO_FRAME_INFO_S *pstFrameInfo);
SA_S32 SA_MAPI_VENC_GetQpmapAddr(VENC_CHN VeChn, VENC_USER_BUF_S *pstQPMapBuf);
/** /**
* @brief 发送Frame进行编码,可以附加 SEI 和 ROI * @brief 发送Frame进行编码,可以附加 SEI 和 ROI
* @details * @details
......
libispalg.so.2.5.0.9.1 libispalg.so.2.5.0.9.6
\ No newline at end of file \ No newline at end of file
libive.so.2.5.0.9.1 libive.so.2.5.0.9.6
\ No newline at end of file \ No newline at end of file
liblapi.so.2.5.0.9.1 liblapi.so.2.5.0.9.6
\ No newline at end of file \ No newline at end of file
libmapi.so.2.5.0.9.1 libmapi.so.2.5.0.9.6
\ No newline at end of file \ No newline at end of file
libvqe.so.2.5.0.9.1 libvqe.so.2.5.0.9.6
\ No newline at end of file \ No newline at end of file
...@@ -221,7 +221,7 @@ typedef enum { ...@@ -221,7 +221,7 @@ typedef enum {
} SA_VIDEO_SNS_TYPE_E; } SA_VIDEO_SNS_TYPE_E;
typedef enum { typedef enum {
SA_VIDEO_ISP_BIN_PATH_BASE = 0, SA_VIDEO_ISP_BIN_PATH_BASE = 0,
SA_VIDEO_ISP_BIN_PATH_COLOR_OUTDOOR = 1, SA_VIDEO_ISP_BIN_PATH_COLOR_OUTDOOR = 1,
SA_VIDEO_ISP_BIN_PATH_COLOR_INDOOR = 2, SA_VIDEO_ISP_BIN_PATH_COLOR_INDOOR = 2,
SA_VIDEO_ISP_BIN_PATH_COLOR_AISP = 3, SA_VIDEO_ISP_BIN_PATH_COLOR_AISP = 3,
...@@ -340,6 +340,7 @@ typedef struct { ...@@ -340,6 +340,7 @@ typedef struct {
VENC_CHN u32ChnId; VENC_CHN u32ChnId;
SA_F32 f32Fps; SA_F32 f32Fps;
MPP_CHN_S stSrc; MPP_CHN_S stSrc;
SA_U32 u32Bitrate;
VENC_USER_BUF_S* stUserBuf; VENC_USER_BUF_S* stUserBuf;
VENC_RECV_PIC_PARAM_S stRecvParam; VENC_RECV_PIC_PARAM_S stRecvParam;
VENC_CHN_ATTR_S stChnAttr; VENC_CHN_ATTR_S stChnAttr;
...@@ -398,7 +399,7 @@ typedef struct saSA_VIDEO_SVP_RESULT_TARGET_S{ ...@@ -398,7 +399,7 @@ typedef struct saSA_VIDEO_SVP_RESULT_TARGET_S{
} SA_VIDEO_SVP_RESULT_TARGET_S; } SA_VIDEO_SVP_RESULT_TARGET_S;
typedef struct saSA_VIDEO_SVP_RESULT_S{ typedef struct saSA_VIDEO_SVP_RESULT_S{
SA_U32 u32TargetNum; // 目标数 SA_U32 u32TargetNum; // 目标数
SA_VIDEO_SVP_RESULT_TARGET_S astTarget[SA_VIDEO_SVP_TARGET_MAX]; // 目标属性 SA_VIDEO_SVP_RESULT_TARGET_S astTarget[SA_VIDEO_SVP_TARGET_MAX]; // 目标属性
} SA_VIDEO_SVP_RESULT_S; } SA_VIDEO_SVP_RESULT_S;
...@@ -408,8 +409,8 @@ typedef SA_VOID (*SA_VIDEO_SVP_RESULT_STRUCT_CB)(VI_DEV u32ViDevId, SA_U32 u32Se ...@@ -408,8 +409,8 @@ typedef SA_VOID (*SA_VIDEO_SVP_RESULT_STRUCT_CB)(VI_DEV u32ViDevId, SA_U32 u32Se
//SVP MAPI输入 //SVP MAPI输入
typedef struct saSA_VIDEO_SVP_CHN_ATTR_S{ typedef struct saSA_VIDEO_SVP_CHN_ATTR_S{
SA_BOOL bEnable; SA_BOOL bEnable;
SVP_CHN u32ChnId; SVP_CHN u32ChnId;
SA_BOOL bOfflineSendFirst; SA_BOOL bOfflineSendFirst;
SVP_CHN_PARAM_S stChnAttr; SVP_CHN_PARAM_S stChnAttr;
SA_VOID *pSvpAlgHd; SA_VOID *pSvpAlgHd;
} SA_VIDEO_SVP_CHN_ATTR_S; } SA_VIDEO_SVP_CHN_ATTR_S;
......
...@@ -52,9 +52,23 @@ extern "C" { ...@@ -52,9 +52,23 @@ extern "C" {
#define HAPI_CALLOC calloc #define HAPI_CALLOC calloc
#define HAPI_FREE free #define HAPI_FREE free
#define HAPI_MDELAY(m) usleep(m * 1000) #define HAPI_MDELAY(m) usleep(m * 1000)
#define HAPI_LOG_I printf
#define HAPI_LOG_W printf #if __linux__
#define HAPI_LOG_E printf #include <sys/syscall.h>
#define SYS_GETTID syscall(SYS_gettid)
#else
#define SYS_GETTID 0
#endif
#define VENC_VIDEO_LOG_E(fmt, ...) do {printf("pid:%lld %s %d, error, " fmt "\n", (unsigned long long int)SYS_GETTID, __func__, __LINE__, ##__VA_ARGS__); } while (0)
#define VENC_VIDEO_LOG_W(fmt, ...) do {printf("pid:%lld %s %d, waring, " fmt "\n", (unsigned long long int)SYS_GETTID, __func__, __LINE__, ##__VA_ARGS__); } while (0)
#define VENC_VIDEO_LOG_I(fmt, ...) do {printf("pid:%lld %s %d, " fmt "\n", (unsigned long long int)SYS_GETTID, __func__, __LINE__, ##__VA_ARGS__); } while (0)
#define VENC_VIDEO_LOG_D(fmt, ...) do {printf("pid:%lld %s %d, " fmt "\n", (unsigned long long int)SYS_GETTID, __func__, __LINE__, ##__VA_ARGS__); } while (0)
#define HAPI_LOG_I VENC_VIDEO_LOG_I
#define HAPI_LOG_W VENC_VIDEO_LOG_W
#define HAPI_LOG_E VENC_VIDEO_LOG_E
#define HAPI_LOG_N(fmt, ...) do {} while (0)
#include <pthread.h> #include <pthread.h>
typedef pthread_t HAPI_THREAD_T; typedef pthread_t HAPI_THREAD_T;
...@@ -221,7 +235,7 @@ typedef enum { ...@@ -221,7 +235,7 @@ typedef enum {
} SA_VIDEO_SNS_TYPE_E; } SA_VIDEO_SNS_TYPE_E;
typedef enum { typedef enum {
SA_VIDEO_ISP_BIN_PATH_BASE = 0, SA_VIDEO_ISP_BIN_PATH_BASE = 0,
SA_VIDEO_ISP_BIN_PATH_COLOR_OUTDOOR = 1, SA_VIDEO_ISP_BIN_PATH_COLOR_OUTDOOR = 1,
SA_VIDEO_ISP_BIN_PATH_COLOR_INDOOR = 2, SA_VIDEO_ISP_BIN_PATH_COLOR_INDOOR = 2,
SA_VIDEO_ISP_BIN_PATH_COLOR_AISP = 3, SA_VIDEO_ISP_BIN_PATH_COLOR_AISP = 3,
...@@ -339,6 +353,7 @@ typedef struct { ...@@ -339,6 +353,7 @@ typedef struct {
SA_BOOL bEnable; SA_BOOL bEnable;
VENC_CHN u32ChnId; VENC_CHN u32ChnId;
SA_F32 f32Fps; SA_F32 f32Fps;
SA_U32 u32Bitrate;
MPP_CHN_S stSrc; MPP_CHN_S stSrc;
VENC_USER_BUF_S* stUserBuf; VENC_USER_BUF_S* stUserBuf;
VENC_RECV_PIC_PARAM_S stRecvParam; VENC_RECV_PIC_PARAM_S stRecvParam;
...@@ -398,7 +413,7 @@ typedef struct saSA_VIDEO_SVP_RESULT_TARGET_S{ ...@@ -398,7 +413,7 @@ typedef struct saSA_VIDEO_SVP_RESULT_TARGET_S{
} SA_VIDEO_SVP_RESULT_TARGET_S; } SA_VIDEO_SVP_RESULT_TARGET_S;
typedef struct saSA_VIDEO_SVP_RESULT_S{ typedef struct saSA_VIDEO_SVP_RESULT_S{
SA_U32 u32TargetNum; // 目标数 SA_U32 u32TargetNum; // 目标数
SA_VIDEO_SVP_RESULT_TARGET_S astTarget[SA_VIDEO_SVP_TARGET_MAX]; // 目标属性 SA_VIDEO_SVP_RESULT_TARGET_S astTarget[SA_VIDEO_SVP_TARGET_MAX]; // 目标属性
} SA_VIDEO_SVP_RESULT_S; } SA_VIDEO_SVP_RESULT_S;
...@@ -408,8 +423,8 @@ typedef SA_VOID (*SA_VIDEO_SVP_RESULT_STRUCT_CB)(VI_DEV u32ViDevId, SA_U32 u32Se ...@@ -408,8 +423,8 @@ typedef SA_VOID (*SA_VIDEO_SVP_RESULT_STRUCT_CB)(VI_DEV u32ViDevId, SA_U32 u32Se
//SVP MAPI输入 //SVP MAPI输入
typedef struct saSA_VIDEO_SVP_CHN_ATTR_S{ typedef struct saSA_VIDEO_SVP_CHN_ATTR_S{
SA_BOOL bEnable; SA_BOOL bEnable;
SVP_CHN u32ChnId; SVP_CHN u32ChnId;
SA_BOOL bOfflineSendFirst; SA_BOOL bOfflineSendFirst;
SVP_CHN_PARAM_S stChnAttr; SVP_CHN_PARAM_S stChnAttr;
SA_VOID *pSvpAlgHd; SA_VOID *pSvpAlgHd;
} SA_VIDEO_SVP_CHN_ATTR_S; } SA_VIDEO_SVP_CHN_ATTR_S;
......
...@@ -20,21 +20,31 @@ extern "C" { ...@@ -20,21 +20,31 @@ extern "C" {
#include "sa_mapi_ae.h" #include "sa_mapi_ae.h"
#include "sa_mapi_vi.h" #include "sa_mapi_vi.h"
#include <sys/time.h> #include <sys/time.h>
#include <dlfcn.h>
#define XIANGSU_RC
#ifdef XIANGSU_RC
#include "encoder_arc.h"
#define SA_HAPI_VIDEO_SVP_DETECT_TARGETS ARC_VIDEO_SVP_DETECT_TARGETS
void* g_wrapper[SA_VIDEO_VENC_CHN_MAX];
#else
typedef struct _SA_HAPI_VIDEO_SVP_TARGET { typedef struct _SA_HAPI_VIDEO_SVP_TARGET {
SA_U32 u32Type; // 目标类型 SA_U32 u32Type; // 目标类型
SA_FLOAT f32Confidence; // 置信度 SA_FLOAT f32Confidence; // 置信度
SA_FLOAT f32StartX; // 目标位置 SA_FLOAT f32StartX; // 目标位置
SA_FLOAT f32StartY; // 目标位置 SA_FLOAT f32StartY; // 目标位置
SA_FLOAT f32EndX; // 目标位置 SA_FLOAT f32EndX; // 目标位置
SA_FLOAT f32EndY; // 目标位置 SA_FLOAT f32EndY; // 目标位置
} SA_HAPI_VIDEO_SVP_TARGET; } SA_HAPI_VIDEO_SVP_TARGET;
typedef struct _SA_HAPI_VIDEO_SVP_DETECT_TARGETS { typedef struct _SA_HAPI_VIDEO_SVP_DETECT_TARGETS {
SA_U32 u32Seq; // 帧号 SA_U32 u32Seq; // 帧号
SA_U32 u32TargetNum; // 目标个数 SA_U32 u32TargetNum; // 目标个数
SA_HAPI_VIDEO_SVP_TARGET stTargets[SA_VIDEO_SVP_TARGET_MAX]; // 目标属性 SA_HAPI_VIDEO_SVP_TARGET stTargets[SA_VIDEO_SVP_TARGET_MAX]; // 目标属性
VIDEO_ZOOM_INFO_S stVZzoomInof;
} SA_HAPI_VIDEO_SVP_DETECT_TARGETS; } SA_HAPI_VIDEO_SVP_DETECT_TARGETS;
#endif
typedef struct _SA_HAPI_VIDEO_OFFLINE_SEND_THR_PARAMS { typedef struct _SA_HAPI_VIDEO_OFFLINE_SEND_THR_PARAMS {
SA_U32 u32Index; SA_U32 u32Index;
...@@ -49,7 +59,7 @@ typedef struct _SA_HAPI_VIDEO_OFFLINE_SEND_WAKEUP_THR_PARAMS { ...@@ -49,7 +59,7 @@ typedef struct _SA_HAPI_VIDEO_OFFLINE_SEND_WAKEUP_THR_PARAMS {
SA_U32 u32VpssChn; SA_U32 u32VpssChn;
} SA_HAPI_VIDEO_OFFLINE_SEND_WAKEUP_THR_PARAMS; } SA_HAPI_VIDEO_OFFLINE_SEND_WAKEUP_THR_PARAMS;
VI_GDC_ATTR_S GDC_PARAM_DEFAULT = VI_GDC_ATTR_S GDC_PARAM_DEFAULT =
{ {
.enGdcMode = VI_GDC_WARP, .enGdcMode = VI_GDC_WARP,
.stGdcWarpParam = { .stGdcWarpParam = {
...@@ -119,7 +129,7 @@ static SA_VIDEO_CONFIG_S SCENE_NORMAL_DEFAULT = ...@@ -119,7 +129,7 @@ static SA_VIDEO_CONFIG_S SCENE_NORMAL_DEFAULT =
} }
}, },
.bSmartRateCtrl = SA_TRUE, .bSmartRateCtrl = SA_TRUE,
.bSmartSEI = SA_TRUE .bSmartSEI = SA_TRUE
} }
}, },
.astTrigConfig = { .astTrigConfig = {
...@@ -164,7 +174,7 @@ static SA_VIDEO_CONFIG_S SCENE_NORMAL_DEFAULT = ...@@ -164,7 +174,7 @@ static SA_VIDEO_CONFIG_S SCENE_NORMAL_DEFAULT =
/* /*
SCENE_CONFIG_AOR 场景 SCENE_CONFIG_AOR 场景
*/ */
static SA_VIDEO_CONFIG_S SCENE_AOR_DEFAULT = static SA_VIDEO_CONFIG_S SCENE_AOR_DEFAULT =
{ {
.astVinConfig = { .astVinConfig = {
{ {
...@@ -219,7 +229,7 @@ static SA_VIDEO_CONFIG_S SCENE_AOR_DEFAULT = ...@@ -219,7 +229,7 @@ static SA_VIDEO_CONFIG_S SCENE_AOR_DEFAULT =
} }
}, },
.bSmartRateCtrl = SA_TRUE, .bSmartRateCtrl = SA_TRUE,
.bSmartSEI = SA_TRUE .bSmartSEI = SA_TRUE
} }
} }
}; };
...@@ -227,7 +237,7 @@ static SA_VIDEO_CONFIG_S SCENE_AOR_DEFAULT = ...@@ -227,7 +237,7 @@ static SA_VIDEO_CONFIG_S SCENE_AOR_DEFAULT =
/* /*
SCENE_CONFIG_DEEPSLEEP 场景 SCENE_CONFIG_DEEPSLEEP 场景
*/ */
static SA_VIDEO_CONFIG_S SCENE_DEEPSLEEP_DEFAULT = static SA_VIDEO_CONFIG_S SCENE_DEEPSLEEP_DEFAULT =
{ {
.astVinConfig = { .astVinConfig = {
{ {
...@@ -282,7 +292,7 @@ static SA_VIDEO_CONFIG_S SCENE_DEEPSLEEP_DEFAULT = ...@@ -282,7 +292,7 @@ static SA_VIDEO_CONFIG_S SCENE_DEEPSLEEP_DEFAULT =
} }
}, },
.bSmartRateCtrl = SA_TRUE, .bSmartRateCtrl = SA_TRUE,
.bSmartSEI = SA_TRUE .bSmartSEI = SA_TRUE
} }
} }
}; };
...@@ -345,7 +355,7 @@ static SA_VIDEO_CONFIG_S SCENE_TRIGGER_DEFAULT = ...@@ -345,7 +355,7 @@ static SA_VIDEO_CONFIG_S SCENE_TRIGGER_DEFAULT =
} }
}, },
.bSmartRateCtrl = SA_TRUE, .bSmartRateCtrl = SA_TRUE,
.bSmartSEI = SA_TRUE .bSmartSEI = SA_TRUE
} }
}, },
.astTrigConfig = { .astTrigConfig = {
...@@ -390,7 +400,7 @@ static SA_VIDEO_CONFIG_S SCENE_TRIGGER_DEFAULT = ...@@ -390,7 +400,7 @@ static SA_VIDEO_CONFIG_S SCENE_TRIGGER_DEFAULT =
/* /*
SCENE_CONFIG_HIBERNATE 场景 SCENE_CONFIG_HIBERNATE 场景
*/ */
static SA_VIDEO_CONFIG_S SCENE_HIBERNATE_DEFAULT = static SA_VIDEO_CONFIG_S SCENE_HIBERNATE_DEFAULT =
{ {
.astVinConfig = { .astVinConfig = {
{ {
...@@ -445,7 +455,7 @@ static SA_VIDEO_CONFIG_S SCENE_HIBERNATE_DEFAULT = ...@@ -445,7 +455,7 @@ static SA_VIDEO_CONFIG_S SCENE_HIBERNATE_DEFAULT =
} }
}, },
.bSmartRateCtrl = SA_TRUE, .bSmartRateCtrl = SA_TRUE,
.bSmartSEI = SA_TRUE .bSmartSEI = SA_TRUE
} }
} }
}; };
...@@ -473,7 +483,7 @@ static SA_U32 g_u32VpssEncodeCount[SA_VIDEO_VIN_DEV_MAX] = {0}; ...@@ -473,7 +483,7 @@ static SA_U32 g_u32VpssEncodeCount[SA_VIDEO_VIN_DEV_MAX] = {0};
HAPI_THREAD_T g_stDumpThread_RAW = {0}; HAPI_THREAD_T g_stDumpThread_RAW = {0};
static SA_BOOL g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_MAX] = {SA_FALSE, SA_FALSE}; static SA_BOOL g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_MAX] = {SA_FALSE, SA_FALSE};
SA_HAPI_VIDEO_DUMPCALLBACK g_pfDumpCallback[SA_HAPI_VIDEO_DUMP_MAX] = {SA_NULL, SA_NULL}; SA_HAPI_VIDEO_DUMPCALLBACK g_pfDumpCallback[SA_HAPI_VIDEO_DUMP_MAX] = {SA_NULL, SA_NULL};
static SA_VOID SA_INNER_HAPI_VIDEO_SVPResultHandle(SA_U32 u32VpssGrp, SVP_FRAME_RESULT_INFO_S *pstFrameResult); static SA_VOID SA_INNER_HAPI_VIDEO_SVPResultHandle(SA_U32 u32VpssGrp, SVP_FRAME_RESULT_INFO_S *pstFrameResult);
static SA_VOID SA_INNER_HAPI_OFFLINE_SEND_GET_VPSS_Thr(void* p); static SA_VOID SA_INNER_HAPI_OFFLINE_SEND_GET_VPSS_Thr(void* p);
...@@ -484,7 +494,7 @@ SA_S32 SA_HAPI_VIDEO_GetSnsRes(SA_VIDEO_SNS_TYPE_E enSnsType, SIZE_S *pstSnsRes) ...@@ -484,7 +494,7 @@ SA_S32 SA_HAPI_VIDEO_GetSnsRes(SA_VIDEO_SNS_TYPE_E enSnsType, SIZE_S *pstSnsRes)
SA_VIDEO_VIN_CONFIG_S stVinCfg = {0}; SA_VIDEO_VIN_CONFIG_S stVinCfg = {0};
stVinCfg.enSensorType = enSnsType; stVinCfg.enSensorType = enSnsType;
return SA_INNER_HAPI_VIN_GetOutResolution(&stVinCfg, pstSnsRes, SA_VIDEO_VIN_INPUT); return SA_INNER_HAPI_VIN_GetOutResolution(&stVinCfg, pstSnsRes, SA_VIDEO_VIN_INPUT);
} }
...@@ -624,7 +634,7 @@ SA_S32 SA_HAPI_VIDEO_GetAttr(SA_VIDEO_SCENE_E enScene, SA_VIDEO_CONFIG_S *pstSce ...@@ -624,7 +634,7 @@ SA_S32 SA_HAPI_VIDEO_GetAttr(SA_VIDEO_SCENE_E enScene, SA_VIDEO_CONFIG_S *pstSce
HAPI_LOG_E("SA_INNER_HAPI_USB_GetEnable failed with %#x!\n", s32Ret); HAPI_LOG_E("SA_INNER_HAPI_USB_GetEnable failed with %#x!\n", s32Ret);
return s32Ret; return s32Ret;
} }
HAPI_LOG_E("SA_INNER_HAPI_USB_GetEnable %d!\n", bEnable); HAPI_LOG_E("SA_INNER_HAPI_USB_GetEnable %d!\n", bEnable);
do { do {
if (SA_VIDEO_SCENE_NORMAL == enScene && SA_FALSE == bEnable) { if (SA_VIDEO_SCENE_NORMAL == enScene && SA_FALSE == bEnable) {
...@@ -634,7 +644,7 @@ SA_S32 SA_HAPI_VIDEO_GetAttr(SA_VIDEO_SCENE_E enScene, SA_VIDEO_CONFIG_S *pstSce ...@@ -634,7 +644,7 @@ SA_S32 SA_HAPI_VIDEO_GetAttr(SA_VIDEO_SCENE_E enScene, SA_VIDEO_CONFIG_S *pstSce
} else { } else {
break; break;
} }
HAPI_LOG_E("SA_INNER_HAPI_USB_SetEnable %d!\n", bEnable); HAPI_LOG_E("SA_INNER_HAPI_USB_SetEnable %d!\n", bEnable);
s32Ret = SA_INNER_HAPI_USB_SetEnable(bEnable); s32Ret = SA_INNER_HAPI_USB_SetEnable(bEnable);
if (SA_SUCCESS != s32Ret) { if (SA_SUCCESS != s32Ret) {
...@@ -743,7 +753,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Stop() ...@@ -743,7 +753,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Stop()
} }
HAPI_SEM_DEINIT(&g_OfflineSendGetVpssThrSem[i]); HAPI_SEM_DEINIT(&g_OfflineSendGetVpssThrSem[i]);
HAPI_SEM_DEINIT(&g_OfflineSendReleaseVpssThrSem[i]); HAPI_SEM_DEINIT(&g_OfflineSendReleaseVpssThrSem[i]);
} }
free(g_pstSvpDetectTargets[0]); free(g_pstSvpDetectTargets[0]);
...@@ -874,7 +884,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p) ...@@ -874,7 +884,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p)
memcpy(&stSvpDetectTargets, g_pstSvpDetectTargets[u32VpssGrp], sizeof(SA_HAPI_VIDEO_SVP_DETECT_TARGETS)); memcpy(&stSvpDetectTargets, g_pstSvpDetectTargets[u32VpssGrp], sizeof(SA_HAPI_VIDEO_SVP_DETECT_TARGETS));
memcpy(&stUserFrame.stFrameInfo, &g_stVpssFrame[u32VpssGrp], sizeof(VIDEO_FRAME_INFO_S)); memcpy(&stUserFrame.stFrameInfo, &g_stVpssFrame[u32VpssGrp], sizeof(VIDEO_FRAME_INFO_S));
// Smart SEI // Smart SEI
if (SA_TRUE == g_bVencSmartSEI[u32VencChn]) { if (SA_TRUE == g_bVencSmartSEI[u32VencChn]) {
stPayload.s32DataSize = sizeof(SA_HAPI_VIDEO_SVP_DETECT_TARGETS); stPayload.s32DataSize = sizeof(SA_HAPI_VIDEO_SVP_DETECT_TARGETS);
stPayload.pUserData = (SA_U8 *)&stSvpDetectTargets; stPayload.pUserData = (SA_U8 *)&stSvpDetectTargets;
stUserFrame.stSei.u32PayloadNum = 1; stUserFrame.stSei.u32PayloadNum = 1;
...@@ -883,7 +893,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p) ...@@ -883,7 +893,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p)
stUserFrame.stSei.u32PayloadNum = 0; stUserFrame.stSei.u32PayloadNum = 0;
stUserFrame.stSei.pstPayload = SA_NULL; stUserFrame.stSei.pstPayload = SA_NULL;
} }
// Smart Roi // Smart Roi
stUserFrame.pstRoiAttr = SA_NULL; stUserFrame.pstRoiAttr = SA_NULL;
// stUserFrame.pstQpMap = SA_NULL; // stUserFrame.pstQpMap = SA_NULL;
...@@ -909,12 +919,49 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p) ...@@ -909,12 +919,49 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p)
if (stRoiAttr.u32RoiPosY[i] + stRoiAttr.u32RoiHeight[i] > g_pstVideoAttr->stVenc.astChannel[u32Index].stChnAttr.stVencAttr.u32EncHeight) { if (stRoiAttr.u32RoiPosY[i] + stRoiAttr.u32RoiHeight[i] > g_pstVideoAttr->stVenc.astChannel[u32Index].stChnAttr.stVencAttr.u32EncHeight) {
stRoiAttr.u32RoiHeight[i] -= 16; stRoiAttr.u32RoiHeight[i] -= 16;
} }
stUserFrame.pstRoiAttr = &stRoiAttr; stUserFrame.pstRoiAttr = &stRoiAttr;
} }
} else if (SA_VIDEO_SMART_ENCODER_QP_MAP == g_enVencSmartEncoder[u32VencChn]) { }
// TODO else if (SA_VIDEO_SMART_ENCODER_QP_MAP == g_enVencSmartEncoder[u32VencChn]) {
// stUserFrame.pstQpMap = ; #ifdef XIANGSU_RC
// USER_FRAME_INFO_S stUserFrame = {0};
VIDEO_FRAME_INFO_S *pstFrameInfo = &(stUserFrame.stFrameInfo);
// memcpy(&stUserFrame.stFrameInfo, &stFrmInfo, sizeof(VIDEO_FRAME_INFO_S));
VENC_USER_BUF_S stQPMapBuf = {0};
s32Ret = SA_MAPI_VENC_GetQpmapAddr(u32VencChn, &stQPMapBuf);
if (SA_SUCCESS != s32Ret) {
HAPI_LOG_E("SA_MAPI_VENC_GetQpmapAddr failed with %#x!\n", s32Ret);
} else {
SA_VOID* pYuvAddr = pstFrameInfo->stVFrame.pVirAddr[0];
SA_U32 u32EncWidth = g_pstVideoAttr->stVenc.astChannel[u32VencChn].stChnAttr.stVencAttr.u32EncWidth;
SA_U32 u32EncHeight = g_pstVideoAttr->stVenc.astChannel[u32VencChn].stChnAttr.stVencAttr.u32EncHeight;
SA_BOOL isHevc = SA_FALSE;
if (g_pstVideoAttr->stVenc.astChannel[u32VencChn].stChnAttr.stVencAttr.eEncType == VENC_ENCODE_TYPE_H265) {
isHevc = SA_TRUE;
}
stUserFrame.stUserRcInfo.bQpMapValid = SA_TRUE;
stUserFrame.stUserRcInfo.u64QpMapPhyAddr = stQPMapBuf.u64StrPhyAddr;
int stride[3];
stride[0] = u32EncWidth;
stride[1] = u32EncWidth/2;
stride[2] = u32EncWidth/2;
if (g_wrapper[u32VencChn] != NULL)
{
s32Ret = Arc_enc_rc_start(g_wrapper[u32VencChn], u32VencChn, stQPMapBuf.pu8Addr, stQPMapBuf.u32StrBufLen, u32EncWidth,
u32EncHeight, isHevc, pYuvAddr, stride, &stSvpDetectTargets);
} else {
HAPI_LOG_E("g_wrapper[u32VencChn] == NULL\n");
}
if (SA_SUCCESS != s32Ret) {
HAPI_LOG_E("VeChn:%d, HAPI_VENC_FillQps failed with %#x!\n", u32VencChn, s32Ret);
} else {
HAPI_LOG_I("VeChn:%d, Arc_enc_rc_start done!\n", u32VencChn);
}
}
#endif
} }
// HAPI_LOG_I("VENC Chn %d SendFrameEx\n", u32VencChn); // HAPI_LOG_I("VENC Chn %d SendFrameEx\n", u32VencChn);
...@@ -929,7 +976,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p) ...@@ -929,7 +976,7 @@ SA_VOID SA_INNER_HAPI_OFFLINE_SEND_Thr(void* p)
HAPI_LOG_W("SA_MAPI_VENC_SendFrame failed with %#x!\n", s32Ret); HAPI_LOG_W("SA_MAPI_VENC_SendFrame failed with %#x!\n", s32Ret);
} }
} }
// 使用次数+1 // 使用次数+1
g_u32VpssEncodeCount[u32VpssGrp]++; g_u32VpssEncodeCount[u32VpssGrp]++;
HAPI_SEM_SIGNAL(&g_OfflineSendReleaseVpssThrSem[u32VpssGrp]); HAPI_SEM_SIGNAL(&g_OfflineSendReleaseVpssThrSem[u32VpssGrp]);
...@@ -1001,7 +1048,6 @@ SA_S32 SA_HAPI_VIDEO_Start(SA_VIDEO_ATTR_S *pstVideoAttr) ...@@ -1001,7 +1048,6 @@ SA_S32 SA_HAPI_VIDEO_Start(SA_VIDEO_ATTR_S *pstVideoAttr)
HAPI_LOG_E("SA_INNER_HAPI_VENC_Start failed with %#x!\n", s32Ret); HAPI_LOG_E("SA_INNER_HAPI_VENC_Start failed with %#x!\n", s32Ret);
goto VIDEO_START_RGN_FAIL; goto VIDEO_START_RGN_FAIL;
} }
s32Ret = SA_INNER_HAPI_VPSS_Start(pstVpssAttr); s32Ret = SA_INNER_HAPI_VPSS_Start(pstVpssAttr);
if (SA_SUCCESS != s32Ret) { if (SA_SUCCESS != s32Ret) {
HAPI_LOG_E("SA_INNER_HAPI_VPSS_Start failed with %#x!\n", s32Ret); HAPI_LOG_E("SA_INNER_HAPI_VPSS_Start failed with %#x!\n", s32Ret);
...@@ -1105,10 +1151,10 @@ SA_S32 SA_HAPI_VIDEO_Stop(SA_VOID) ...@@ -1105,10 +1151,10 @@ SA_S32 SA_HAPI_VIDEO_Stop(SA_VOID)
SA_VIDEO_RGN_ATTR_S *pstRgnAttr = SA_NULL; SA_VIDEO_RGN_ATTR_S *pstRgnAttr = SA_NULL;
SA_VIDEO_VENC_ATTR_S *pstVencAttr = SA_NULL; SA_VIDEO_VENC_ATTR_S *pstVencAttr = SA_NULL;
SA_VIDEO_SVP_ATTR_S *pstSvpAttr = SA_NULL; SA_VIDEO_SVP_ATTR_S *pstSvpAttr = SA_NULL;
HAPI_LOG_I("SA_HAPI_VIDEO_Stop!\n"); HAPI_LOG_I("SA_HAPI_VIDEO_Stop!\n");
g_bHapiRuning = SA_FALSE; g_bHapiRuning = SA_FALSE;
if (SA_NULL == g_pstVideoAttr) { if (SA_NULL == g_pstVideoAttr) {
HAPI_LOG_E("video attribute is null pointer!\n"); HAPI_LOG_E("video attribute is null pointer!\n");
return SA_ERR_HAPI_VIDEO_NULL_PTR; return SA_ERR_HAPI_VIDEO_NULL_PTR;
...@@ -1124,7 +1170,7 @@ SA_S32 SA_HAPI_VIDEO_Stop(SA_VOID) ...@@ -1124,7 +1170,7 @@ SA_S32 SA_HAPI_VIDEO_Stop(SA_VOID)
pstRgnAttr = &g_pstVideoAttr->stRgn; pstRgnAttr = &g_pstVideoAttr->stRgn;
pstVencAttr = &g_pstVideoAttr->stVenc; pstVencAttr = &g_pstVideoAttr->stVenc;
pstSvpAttr = &g_pstVideoAttr->stSvp; pstSvpAttr = &g_pstVideoAttr->stSvp;
SA_INNER_HAPI_OFFLINE_SEND_Stop(); SA_INNER_HAPI_OFFLINE_SEND_Stop();
SA_INNER_HAPI_SVP_RegistCallback(SA_NULL); SA_INNER_HAPI_SVP_RegistCallback(SA_NULL);
...@@ -1190,7 +1236,7 @@ VIDEO_STOP_FAIL: ...@@ -1190,7 +1236,7 @@ VIDEO_STOP_FAIL:
SA_S32 SA_HAPI_VIDEO_GetStream(VENC_CHN u32VeChn, VENC_STREAM_S *pstStream, SA_S32 s32MilliSec) SA_S32 SA_HAPI_VIDEO_GetStream(VENC_CHN u32VeChn, VENC_STREAM_S *pstStream, SA_S32 s32MilliSec)
{ {
SA_S32 s32Ret = SA_SUCCESS; SA_S32 s32Ret = SA_SUCCESS;
if (SA_NULL == pstStream) { if (SA_NULL == pstStream) {
HAPI_LOG_E("video stream is null pointer!\n"); HAPI_LOG_E("video stream is null pointer!\n");
return SA_ERR_HAPI_VIDEO_NULL_PTR; return SA_ERR_HAPI_VIDEO_NULL_PTR;
...@@ -1202,13 +1248,44 @@ SA_S32 SA_HAPI_VIDEO_GetStream(VENC_CHN u32VeChn, VENC_STREAM_S *pstStream, SA_S ...@@ -1202,13 +1248,44 @@ SA_S32 SA_HAPI_VIDEO_GetStream(VENC_CHN u32VeChn, VENC_STREAM_S *pstStream, SA_S
return s32Ret; return s32Ret;
} }
#ifdef XIANGSU_RC
int is_IFrame = 0;
int packet_len = 0;
VENC_PACK_S *pstPack = SA_NULL;
if(g_wrapper[u32VeChn])
is_IFrame = 0;
for (SA_U32 u32Index = 0; u32Index < pstStream->u32PackCount; u32Index++)
{
pstPack = &pstStream->pstPack[u32Index];
if (SA_NULL != pstPack->pu8Addr && pstPack->u32Len > 0)
{
packet_len += pstPack->u32Len;
if (g_wrapper[u32VeChn] != NULL && (pstPack->DataType.enH265EType == H265E_NALU_ISLICE || pstPack->DataType.enH265EType == H265E_NALU_IDRSLICE ||
pstPack->DataType.enH264EType == H264E_NALU_ISLICE || pstPack->DataType.enH264EType == H264E_NALU_IDRSLICE))
{
is_IFrame = 1;
}
}
else {
break;
}
}
if (g_wrapper[u32VeChn] != NULL)
{
Arc_enc_rc_end(g_wrapper[u32VeChn], packet_len, is_IFrame);
}
#endif
return SA_SUCCESS; return SA_SUCCESS;
} }
SA_S32 SA_HAPI_VIDEO_ReleaseStream(VENC_CHN u32VeChn, VENC_STREAM_S *pstStream) SA_S32 SA_HAPI_VIDEO_ReleaseStream(VENC_CHN u32VeChn, VENC_STREAM_S *pstStream)
{ {
SA_S32 s32Ret = SA_SUCCESS; SA_S32 s32Ret = SA_SUCCESS;
if (SA_NULL == pstStream) { if (SA_NULL == pstStream) {
HAPI_LOG_E("video stream is null pointer!\n"); HAPI_LOG_E("video stream is null pointer!\n");
return SA_ERR_HAPI_VIDEO_NULL_PTR; return SA_ERR_HAPI_VIDEO_NULL_PTR;
...@@ -1304,15 +1381,15 @@ SA_VOID SA_INNER_HAPI_VIDEO_Raw_DumpProc(SA_VOID* s32DevId) ...@@ -1304,15 +1381,15 @@ SA_VOID SA_INNER_HAPI_VIDEO_Raw_DumpProc(SA_VOID* s32DevId)
} }
} }
SA_VOID SA_INNER_HAPI_VIDEO_StopDumpRaw(SA_S32 s32DevId) SA_VOID SA_INNER_HAPI_VIDEO_StopDumpRaw(SA_S32 s32DevId)
{ {
if (g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW] ) { if (g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW] ) {
g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW] = SA_FALSE; g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW] = SA_FALSE;
HAPI_THREAD_DEINIT(g_stDumpThread_RAW); HAPI_THREAD_DEINIT(g_stDumpThread_RAW);
HAPI_LOG_I("HAPI Video Stopped dumping RAW images.\n"); HAPI_LOG_I("HAPI Video Stopped dumping RAW images.\n");
} }
SA_MAPI_VI_StopViDevDump(s32DevId); SA_MAPI_VI_StopViDevDump(s32DevId);
} }
SA_S32 SA_INNER_HAPI_VIDEO_StartDumpRaw(SA_S32 s32DevId, SA_HAPI_VIDEO_DUMPCALLBACK pFrameCallback) SA_S32 SA_INNER_HAPI_VIDEO_StartDumpRaw(SA_S32 s32DevId, SA_HAPI_VIDEO_DUMPCALLBACK pFrameCallback)
{ {
...@@ -1321,21 +1398,21 @@ SA_S32 SA_INNER_HAPI_VIDEO_StartDumpRaw(SA_S32 s32DevId, SA_HAPI_VIDEO_DUMPCALLB ...@@ -1321,21 +1398,21 @@ SA_S32 SA_INNER_HAPI_VIDEO_StartDumpRaw(SA_S32 s32DevId, SA_HAPI_VIDEO_DUMPCALLB
VI_DEV_DMA_PARM_S stDmaParam = {0}; VI_DEV_DMA_PARM_S stDmaParam = {0};
s32DeviceID = s32DevId; s32DeviceID = s32DevId;
if (SA_FALSE == g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW]) { if (SA_FALSE == g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW]) {
stDmaParam.stCropPara.bEnCrop = SA_FALSE; stDmaParam.stCropPara.bEnCrop = SA_FALSE;
stDmaParam.stCropPara.stRect.s32X = 0; stDmaParam.stCropPara.stRect.s32X = 0;
stDmaParam.stCropPara.stRect.s32Y = 0; stDmaParam.stCropPara.stRect.s32Y = 0;
stDmaParam.stCropPara.stRect.u32Width = g_pstVideoAttr->stVin.astChannel[s32DeviceID].stViAttr.stViPipeAttr.u32Width; stDmaParam.stCropPara.stRect.u32Width = g_pstVideoAttr->stVin.astChannel[s32DeviceID].stViAttr.stViPipeAttr.u32Width;
stDmaParam.stCropPara.stRect.u32Height = g_pstVideoAttr->stVin.astChannel[s32DeviceID].stViAttr.stViPipeAttr.u32Height; stDmaParam.stCropPara.stRect.u32Height = g_pstVideoAttr->stVin.astChannel[s32DeviceID].stViAttr.stViPipeAttr.u32Height;
stDmaParam.u32Depth = 2; stDmaParam.u32Depth = 2;
s32Ret = SA_MAPI_VI_StartViDevDump(s32DevId, &stDmaParam); s32Ret = SA_MAPI_VI_StartViDevDump(s32DevId, &stDmaParam);
if (s32Ret != SA_SUCCESS) { if (s32Ret != SA_SUCCESS) {
HAPI_LOG_W("Failed to SA_MAPI_VI_StartViDevDump: error %d\n", s32Ret); HAPI_LOG_W("Failed to SA_MAPI_VI_StartViDevDump: error %d\n", s32Ret);
return s32Ret; return s32Ret;
} }
g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW] = SA_TRUE; g_bDumpEnabled[SA_HAPI_VIDEO_DUMP_RAW] = SA_TRUE;
g_pfDumpCallback[SA_HAPI_VIDEO_DUMP_RAW] = pFrameCallback; g_pfDumpCallback[SA_HAPI_VIDEO_DUMP_RAW] = pFrameCallback;
HAPI_THREAD_INIT(&g_stDumpThread_RAW, "msg_dump_raw", SA_INNER_HAPI_VIDEO_Raw_DumpProc, &s32DeviceID); HAPI_THREAD_INIT(&g_stDumpThread_RAW, "msg_dump_raw", SA_INNER_HAPI_VIDEO_Raw_DumpProc, &s32DeviceID);
} }
return s32Ret; return s32Ret;
} }
...@@ -1347,7 +1424,7 @@ SA_S32 SA_HAPI_VIDEO_StartDump(VI_DEV s32DevId, SA_HAPI_VIDEO_DUMP_E enDumpType ...@@ -1347,7 +1424,7 @@ SA_S32 SA_HAPI_VIDEO_StartDump(VI_DEV s32DevId, SA_HAPI_VIDEO_DUMP_E enDumpType
switch (enDumpType) switch (enDumpType)
{ {
case SA_HAPI_VIDEO_DUMP_RAW: case SA_HAPI_VIDEO_DUMP_RAW:
SA_INNER_HAPI_VIDEO_StartDumpRaw(s32DevId, pFrameCallback); SA_INNER_HAPI_VIDEO_StartDumpRaw(s32DevId, pFrameCallback);
break; break;
case SA_HAPI_VIDEO_DUMP_YUV: case SA_HAPI_VIDEO_DUMP_YUV:
if (SA_FALSE == g_bHapiDumpYUV[s32DevId]) { if (SA_FALSE == g_bHapiDumpYUV[s32DevId]) {
......
...@@ -19,6 +19,13 @@ extern SA_BOOL g_bVencSmartSEI[SA_VIDEO_VENC_CHN_MAX]; ...@@ -19,6 +19,13 @@ extern SA_BOOL g_bVencSmartSEI[SA_VIDEO_VENC_CHN_MAX];
extern SA_VIDEO_SMART_ENCODER_TYPE_E g_enVencSmartEncoder[SA_VIDEO_VENC_CHN_MAX]; extern SA_VIDEO_SMART_ENCODER_TYPE_E g_enVencSmartEncoder[SA_VIDEO_VENC_CHN_MAX];
SA_S32 g_s32HapiMaxVencResChn[SA_VIDEO_VIN_DEV_MAX] = {-1, -1}; SA_S32 g_s32HapiMaxVencResChn[SA_VIDEO_VIN_DEV_MAX] = {-1, -1};
#define XIANGSU_RC
#ifdef XIANGSU_RC
#include "encoder_arc.h"
// #define SA_VIDEO_VENC_CHN_MAX 1
extern void* g_wrapper[SA_VIDEO_VENC_CHN_MAX];
#endif
SA_BOOL SA_INNER_HAPI_VENC_Fps(SA_F32 f32Fps, SA_S32 *ps32Fps) SA_BOOL SA_INNER_HAPI_VENC_Fps(SA_F32 f32Fps, SA_S32 *ps32Fps)
{ {
if (((SA_S32)(f32Fps * 100)) > (((SA_S32)f32Fps) * 100)) { if (((SA_S32)(f32Fps * 100)) > (((SA_S32)f32Fps) * 100)) {
...@@ -103,7 +110,7 @@ SA_S32 SA_INNER_HAPI_VENC_GetConfig(SA_VIDEO_SCENE_E enScene, SA_VIDEO_CONFIG_S ...@@ -103,7 +110,7 @@ SA_S32 SA_INNER_HAPI_VENC_GetConfig(SA_VIDEO_SCENE_E enScene, SA_VIDEO_CONFIG_S
} }
if (SA_TRUE == pstVenChnCfg->bSmartSEI if (SA_TRUE == pstVenChnCfg->bSmartSEI
|| SA_VIDEO_SMART_ENCODER_NONE != pstVenChnCfg->enSmartEncoder) { /* || SA_VIDEO_SMART_ENCODER_NONE != pstVenChnCfg->enSmartEncoder */) {
if (VENC_ENCODE_TYPE_JPEG == pstVenChnCfg->enEncodeType) { if (VENC_ENCODE_TYPE_JPEG == pstVenChnCfg->enEncodeType) {
HAPI_LOG_E("jpeg do not support smart function!\n"); HAPI_LOG_E("jpeg do not support smart function!\n");
return SA_ERR_HAPI_VIDEO_ILLEGAL_PARAM; return SA_ERR_HAPI_VIDEO_ILLEGAL_PARAM;
...@@ -396,7 +403,13 @@ SA_S32 SA_INNER_HAPI_VENC_GetChnConfig(SA_U32 u32Chn, SA_VIDEO_SCENE_E enScene, ...@@ -396,7 +403,13 @@ SA_S32 SA_INNER_HAPI_VENC_GetChnConfig(SA_U32 u32Chn, SA_VIDEO_SCENE_E enScene,
/*get VENC_RC_ATTR_S*/ /*get VENC_RC_ATTR_S*/
pstChnAttr->stChnAttr.stRcAttr.eRcMode = pstSceneChn->astVencConfig[u32Chn].enRcMode; pstChnAttr->stChnAttr.stRcAttr.eRcMode = pstSceneChn->astVencConfig[u32Chn].enRcMode;
if (SA_VIDEO_SMART_ENCODER_ROI == pstSceneChn->astVencConfig[u32Chn].enSmartEncoder) {
if (SA_VIDEO_SMART_ENCODER_QP_MAP == pstSceneChn->astVencConfig[u32Chn].enSmartEncoder) {
pstChnAttr->stChnAttr.stRcAttr.eQpCtrlMode = VENC_QP_MODE_LOAD_QP;
pstChnAttr->stChnAttr.stRcAttr.eQpMapMode = VENC_RC_QPMAP_MODE_ABSOLUTE_LOADQP;
pstChnAttr->stChnAttr.stRcAttr.eRcMode = VENC_RC_MODE_BYPASS;
}
else if (SA_VIDEO_SMART_ENCODER_ROI == pstSceneChn->astVencConfig[u32Chn].enSmartEncoder) {
pstChnAttr->stChnAttr.stRcAttr.eQpCtrlMode = VENC_QP_MODE_AUTO_QP; pstChnAttr->stChnAttr.stRcAttr.eQpCtrlMode = VENC_QP_MODE_AUTO_QP;
pstChnAttr->stChnAttr.stRcAttr.eQpMapMode = VENC_RC_QPMAP_MODE_RELATIVE_ROI; pstChnAttr->stChnAttr.stRcAttr.eQpMapMode = VENC_RC_QPMAP_MODE_RELATIVE_ROI;
} }
...@@ -530,6 +543,10 @@ SA_S32 SA_INNER_HAPI_VENC_GetChnConfig(SA_U32 u32Chn, SA_VIDEO_SCENE_E enScene, ...@@ -530,6 +543,10 @@ SA_S32 SA_INNER_HAPI_VENC_GetChnConfig(SA_U32 u32Chn, SA_VIDEO_SCENE_E enScene,
memcpy(pstChnAttr->stChnAttr.stRcAttr.stAvbr.u8BrCoef, au8BrCoef, VENC_AVBR_COEF_NUM); memcpy(pstChnAttr->stChnAttr.stRcAttr.stAvbr.u8BrCoef, au8BrCoef, VENC_AVBR_COEF_NUM);
break; break;
case VENC_RC_MODE_BYPASS: case VENC_RC_MODE_BYPASS:
#ifdef XIANGSU_RC
pstChnAttr->u32Bitrate = pstSceneChn->astVencConfig[u32Chn].u32Bitrate;
break;
#endif
/* todo: code */ /* todo: code */
break; break;
default: default:
...@@ -552,6 +569,43 @@ SA_S32 SA_INNER_HAPI_VENC_StartChn(SA_VIDEO_VENC_CHN_ATTR_S *pstVencChnAttr) ...@@ -552,6 +569,43 @@ SA_S32 SA_INNER_HAPI_VENC_StartChn(SA_VIDEO_VENC_CHN_ATTR_S *pstVencChnAttr)
return s32Ret; return s32Ret;
} }
#ifdef XIANGSU_RC
if (1)
{ /*--------------------Arc------------------*/
Arc_encPara encPara;
encPara.Width = pstVencChnAttr->stChnAttr.stVencAttr.u32EncWidth;
encPara.Height = pstVencChnAttr->stChnAttr.stVencAttr.u32EncHeight;
encPara.encType = 1;
encPara.targetBitrate = pstVencChnAttr->u32Bitrate;
encPara.targetmaxBitrate = pstVencChnAttr->u32Bitrate * 1.5;
encPara.gopLen = pstVencChnAttr->stChnAttr.stGopAttr.stDefaultGop.u16GopLen;
encPara.viLen = pstVencChnAttr->f32Fps;
encPara.i_fps_num = pstVencChnAttr->f32Fps;
encPara.i_fps_den = 1;
encPara.quality_level = 3;
encPara.pcbt_enable = 0;
printf("Arc Info: ChanId = %d\n", u32ChnId);
printf("Arc Info: CodeTpye = %d\n",encPara.encType);
printf("Arc Info: width = %d, height = %d\n",encPara.Width, encPara.Height);
printf("Arc Info: gopLen = %d\n", encPara.gopLen);
printf("Arc Info: fps = %d\n",encPara.i_fps_num);
printf("Arc Info: targetBitrate = %d\n",encPara.targetBitrate);
g_wrapper[u32ChnId] = Arc_enc_init(&encPara);
if (!g_wrapper[u32ChnId])
{
printf("Arc_enc_init failed!\n");
return -1;
}
}
else
{
g_wrapper[u32ChnId] = NULL;
printf("Arc Info: ChanId = %d, do not use ArcEnc\n", u32ChnId);
}
#endif
if (pstVencChnAttr->stChnAttr.stVencAttr.eWorkMode == VENC_WORK_MODE_ONLINE if (pstVencChnAttr->stChnAttr.stVencAttr.eWorkMode == VENC_WORK_MODE_ONLINE
|| pstVencChnAttr->stChnAttr.stVencAttr.eWorkMode == VENC_WORK_MODE_OFFLINE_BIND) { || pstVencChnAttr->stChnAttr.stVencAttr.eWorkMode == VENC_WORK_MODE_OFFLINE_BIND) {
s32Ret = SA_INNER_HAPI_VENC_BindVpss(u32ChnId, s32Ret = SA_INNER_HAPI_VENC_BindVpss(u32ChnId,
...@@ -599,6 +653,13 @@ SA_S32 SA_INNER_HAPI_VENC_StopChn(SA_VIDEO_VENC_CHN_ATTR_S *pstVencChnAttr) ...@@ -599,6 +653,13 @@ SA_S32 SA_INNER_HAPI_VENC_StopChn(SA_VIDEO_VENC_CHN_ATTR_S *pstVencChnAttr)
} }
} }
#ifdef XIANGSU_RC
if (g_wrapper[u32ChnId] != NULL) {
Arc_enc_deinit(g_wrapper[u32ChnId]);
g_wrapper[u32ChnId] = NULL;
}
#endif
s32Ret = SA_MAPI_VENC_DestroyChn(u32ChnId); s32Ret = SA_MAPI_VENC_DestroyChn(u32ChnId);
if (s32Ret != SA_SUCCESS) { if (s32Ret != SA_SUCCESS) {
HAPI_LOG_E("SA_MAPI_VENC_DestroyChn failed with %x\n", s32Ret); HAPI_LOG_E("SA_MAPI_VENC_DestroyChn failed with %x\n", s32Ret);
......
...@@ -274,8 +274,8 @@ SA_S32 SA_INNER_HAPI_VPSS_GetChnConfig(SIZE_S *pstResolution, SA_S32 s32Fps, SA_ ...@@ -274,8 +274,8 @@ SA_S32 SA_INNER_HAPI_VPSS_GetChnConfig(SIZE_S *pstResolution, SA_S32 s32Fps, SA_
pstVpssChnAttr->stChnAttr.bTextureDataEn = SA_FALSE; pstVpssChnAttr->stChnAttr.bTextureDataEn = SA_FALSE;
pstVpssChnAttr->stChnAttr.bSramEn = SA_FALSE; pstVpssChnAttr->stChnAttr.bSramEn = SA_FALSE;
pstVpssChnAttr->stChnAttr.bCacheEn = SA_FALSE; pstVpssChnAttr->stChnAttr.bCacheEn = SA_TRUE;
pstVpssChnAttr->stCropAttr.bCropEn = SA_FALSE; pstVpssChnAttr->stCropAttr.bCropEn = SA_FALSE;
return SA_SUCCESS; return SA_SUCCESS;
......
...@@ -6,6 +6,7 @@ CFLAGS := -g -Wall -fpic ...@@ -6,6 +6,7 @@ CFLAGS := -g -Wall -fpic
CFLAGS += $(MAPI_SDK_SYS_INC_DIR) CFLAGS += $(MAPI_SDK_SYS_INC_DIR)
LDFLAGS += $(MAPI_SDK_SYS_LIB_DIR) LDFLAGS += $(MAPI_SDK_SYS_LIB_DIR)
LDFLAGS += $(MAPI_SDK_SYS_LD_FLAGS) LDFLAGS += $(MAPI_SDK_SYS_LD_FLAGS)
LDFLAGS += -lArcEncCam1.0.0.6.1
LDFLAGS += -lhapi_open -lrtsp_open -lfreetype -limu_open -ltool_comm LDFLAGS += -lhapi_open -lrtsp_open -lfreetype -limu_open -ltool_comm
DIR_LIB := $(src) DIR_LIB := $(src)
......
...@@ -15,7 +15,7 @@ extern "C" { ...@@ -15,7 +15,7 @@ extern "C" {
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/file.h> #include <sys/file.h>
#include <stdint.h> #include <stdint.h>
#include <time.h> #include <time.h>
#include <sys/time.h> #include <sys/time.h>
#include <arpa/inet.h> #include <arpa/inet.h>
...@@ -31,7 +31,7 @@ extern "C" { ...@@ -31,7 +31,7 @@ extern "C" {
#include "sa_list.h" #include "sa_list.h"
#include "rtsp.h" #include "rtsp.h"
#include "saJSON.h" #include "saJSON.h"
#include "sa_comm.h" #include "sa_comm.h"
// #include "video.h" // #include "video.h"
#include "tool_comm.h" #include "tool_comm.h"
#include "tool_capture.h" #include "tool_capture.h"
...@@ -125,7 +125,7 @@ SA_VOID STREAMERLITE_VAD_DetectHandle(AUDIO_SAP_DETECT_RESULT_TYPE_E enType) ...@@ -125,7 +125,7 @@ SA_VOID STREAMERLITE_VAD_DetectHandle(AUDIO_SAP_DETECT_RESULT_TYPE_E enType)
HAPI_LOG_I("vad detect result:%d\n", enType); HAPI_LOG_I("vad detect result:%d\n", enType);
} }
SA_S32 STREAMERLITE_Dup_File(const SA_CHAR *pcFileName, SA_U8 **ppu8FileBuf, SA_U32 *pu32FileSize) SA_S32 STREAMERLITE_Dup_File(const SA_CHAR *pcFileName, SA_U8 **ppu8FileBuf, SA_U32 *pu32FileSize)
{ {
SA_S32 s32Ret = SA_SUCCESS; SA_S32 s32Ret = SA_SUCCESS;
SA_U32 u32MallocSize = 0; SA_U32 u32MallocSize = 0;
...@@ -137,13 +137,13 @@ SA_S32 STREAMERLITE_Dup_File(const SA_CHAR *pcFileName, SA_U8 **ppu8FileBuf, SA_ ...@@ -137,13 +137,13 @@ SA_S32 STREAMERLITE_Dup_File(const SA_CHAR *pcFileName, SA_U8 **ppu8FileBuf, SA_
HAPI_LOG_E("file name is null pointer!\n"); HAPI_LOG_E("file name is null pointer!\n");
return SA_FAILURE; return SA_FAILURE;
} }
pstFD = fopen(pcFileName, "rb"); pstFD = fopen(pcFileName, "rb");
if (SA_NULL == pstFD) { if (SA_NULL == pstFD) {
HAPI_LOG_E("open file %s failed!\n", pcFileName); HAPI_LOG_E("open file %s failed!\n", pcFileName);
return SA_FAILURE; return SA_FAILURE;
} }
fseek(pstFD, 0L, SEEK_END); fseek(pstFD, 0L, SEEK_END);
u32MallocSize = ftell(pstFD); u32MallocSize = ftell(pstFD);
if (0 == u32MallocSize) { if (0 == u32MallocSize) {
...@@ -171,8 +171,8 @@ SA_S32 STREAMERLITE_Dup_File(const SA_CHAR *pcFileName, SA_U8 **ppu8FileBuf, SA_ ...@@ -171,8 +171,8 @@ SA_S32 STREAMERLITE_Dup_File(const SA_CHAR *pcFileName, SA_U8 **ppu8FileBuf, SA_
*pu32FileSize = u32ReadSize; *pu32FileSize = u32ReadSize;
*ppu8FileBuf = pu8Buf; *ppu8FileBuf = pu8Buf;
return s32Ret; return s32Ret;
} }
SA_U32 STREAMERLITE_Aton(SA_CHAR *strIp, SA_BOOL bEndian) SA_U32 STREAMERLITE_Aton(SA_CHAR *strIp, SA_BOOL bEndian)
...@@ -244,7 +244,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -244,7 +244,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
HAPI_LOG_E("parse config file '%s' failed!", strConfigFile); HAPI_LOG_E("parse config file '%s' failed!", strConfigFile);
return SA_FAILURE; return SA_FAILURE;
} }
SA_CHAR strJsonDoc[32] = {0}; SA_CHAR strJsonDoc[32] = {0};
saJSON_GetString_Default(pstRoot, "doc", strJsonDoc, ""); saJSON_GetString_Default(pstRoot, "doc", strJsonDoc, "");
if (strcmp(strJsonDoc, "lite")) { if (strcmp(strJsonDoc, "lite")) {
...@@ -253,11 +253,11 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -253,11 +253,11 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
} }
SA_CHAR strJsonVer[32] = {0}; SA_CHAR strJsonVer[32] = {0};
SA_JSON_NODE_ASSERT(saJSON_GetString(pstRoot, "version", strJsonVer, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetString(pstRoot, "version", strJsonVer, SA_TRUE));
SA_U32 u32Version = STREAMERLITE_Aton(strJsonVer, SA_TRUE); SA_U32 u32Version = STREAMERLITE_Aton(strJsonVer, SA_TRUE);
if (((u32Version >> 24) & 0xFF) != STREAMERLITE_VER_MAJOR || ((u32Version >> 16) & 0xFF) != STREAMERLITE_VER_MINOR || ((u32Version >> 8) & 0xFF) != STREAMERLITE_VER_DEVELOP) { if (((u32Version >> 24) & 0xFF) != STREAMERLITE_VER_MAJOR || ((u32Version >> 16) & 0xFF) != STREAMERLITE_VER_MINOR || ((u32Version >> 8) & 0xFF) != STREAMERLITE_VER_DEVELOP) {
HAPI_LOG_E("json version(%s) is not match to streamer version(%d.%d.%d.x)", strJsonVer, STREAMERLITE_VER_MAJOR, STREAMERLITE_VER_MINOR, STREAMERLITE_VER_DEVELOP); HAPI_LOG_E("json version(%s) is not match to streamer version(%d.%d.%d.x)", strJsonVer, STREAMERLITE_VER_MAJOR, STREAMERLITE_VER_MINOR, STREAMERLITE_VER_DEVELOP);
return SA_FAILURE; return SA_FAILURE;
} }
//workmode(scene) //workmode(scene)
...@@ -366,7 +366,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -366,7 +366,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
stAudioScene.stSapConfig.pDetectCallback = STREAMERLITE_VAD_DetectHandle; stAudioScene.stSapConfig.pDetectCallback = STREAMERLITE_VAD_DetectHandle;
}//end of audio }//end of audio
//video //video
saJSON *pstVideo = saJSON_GetObjectItem(pstRoot, "video"); saJSON *pstVideo = saJSON_GetObjectItem(pstRoot, "video");
SA_JSON_NULL_ASSERT(pstVideo); SA_JSON_NULL_ASSERT(pstVideo);
...@@ -380,7 +380,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -380,7 +380,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
pstVinCfg = &stVideoScene.astVinConfig[u32Pos]; pstVinCfg = &stVideoScene.astVinConfig[u32Pos];
saJSON *pstVinNode = saJSON_GetArrayItem(pstVinArray, u32Pos); saJSON *pstVinNode = saJSON_GetArrayItem(pstVinArray, u32Pos);
SA_JSON_NULL_ASSERT(pstVinNode); SA_JSON_NULL_ASSERT(pstVinNode);
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "enable", &pstVinCfg->bEnable, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "enable", &pstVinCfg->bEnable, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "devid", &pstVinCfg->s32DevId, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "devid", &pstVinCfg->s32DevId, SA_TRUE));
memset(strValue, 0, sizeof(strValue)); memset(strValue, 0, sizeof(strValue));
SA_JSON_NODE_ASSERT(saJSON_GetString(pstVinNode, "sensor", strValue, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetString(pstVinNode, "sensor", strValue, SA_TRUE));
...@@ -425,7 +425,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -425,7 +425,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
} }
SIZE_S stSize = {0}; SIZE_S stSize = {0};
// compare and get max vi size // compare and get max vi size
SA_HAPI_VIDEO_GetSnsRes(pstVinCfg->enSensorType, &stSize); SA_HAPI_VIDEO_GetSnsRes(pstVinCfg->enSensorType, &stSize);
if(stSize.u32Width > g_stViSize.u32Width){ if(stSize.u32Width > g_stViSize.u32Width){
g_stViSize.u32Width = stSize.u32Width; g_stViSize.u32Width = stSize.u32Width;
...@@ -436,13 +436,13 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -436,13 +436,13 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
SA_JSON_NODE_ASSERT(saJSON_GetFloat(pstVinNode, "minfps", &pstVinCfg->f32MinFps, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetFloat(pstVinNode, "minfps", &pstVinCfg->f32MinFps, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "maxexptime", &pstVinCfg->u32MaxExpTime, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "maxexptime", &pstVinCfg->u32MaxExpTime, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "smartae", &pstVinCfg->bSmartAE, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "smartae", &pstVinCfg->bSmartAE, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "dumpyuv", &pstVinCfg->bDumpYUV, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "dumpyuv", &pstVinCfg->bDumpYUV, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "dumpraw", &pstVinCfg->bDumpRAW, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "dumpraw", &pstVinCfg->bDumpRAW, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "mirror", &pstVinCfg->bMirror, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "mirror", &pstVinCfg->bMirror, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "flip", &pstVinCfg->bFlip, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "flip", &pstVinCfg->bFlip, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "sd", &pstVinCfg->bSdEnable, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "sd", &pstVinCfg->bSdEnable, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "flickerEnable", &pstVinCfg->bFlickerEnable, SA_FALSE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "flickerEnable", &pstVinCfg->bFlickerEnable, SA_FALSE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "flickerFrequency", &pstVinCfg->u8FlickerFrequency, 50)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "flickerFrequency", &pstVinCfg->u8FlickerFrequency, 50));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "rotation", &pstVinCfg->enRotation, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "rotation", &pstVinCfg->enRotation, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "eisMode", &pstVinCfg->enEisMode, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "eisMode", &pstVinCfg->enEisMode, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "gdc", &pstVinCfg->bGdc, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVinNode, "gdc", &pstVinCfg->bGdc, SA_TRUE));
...@@ -456,21 +456,21 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -456,21 +456,21 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
for (SA_S32 i = 0; i < u32Size && i < SA_VIDEO_ISP_BIN_PATH_NUM; i++) { for (SA_S32 i = 0; i < u32Size && i < SA_VIDEO_ISP_BIN_PATH_NUM; i++) {
saJSON *pstIspFileNode = saJSON_GetArrayItem(pstIspFileArray, i); saJSON *pstIspFileNode = saJSON_GetArrayItem(pstIspFileArray, i);
SA_JSON_NULL_ASSERT(pstIspFileNode); SA_JSON_NULL_ASSERT(pstIspFileNode);
SA_JSON_NODE_ASSERT(saJSON_GetString(pstIspFileNode, SA_NULL, pstVinCfg->astrIspFile[i], SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetString(pstIspFileNode, SA_NULL, pstVinCfg->astrIspFile[i], SA_TRUE));
} }
} }
SA_JSON_NODE_ASSERT(saJSON_GetString(pstVinNode, "algfile", pstVinCfg->strAlgFile, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetString(pstVinNode, "algfile", pstVinCfg->strAlgFile, SA_TRUE));
} }
//venc //venc
saJSON *pstVencArray = saJSON_GetObjectItem(pstVideo, "venc"); saJSON *pstVencArray = saJSON_GetObjectItem(pstVideo, "venc");
SA_JSON_NULL_ASSERT(pstVencArray); SA_JSON_NULL_ASSERT(pstVencArray);
s32Count = saJSON_GetArraySize(pstVencArray); s32Count = saJSON_GetArraySize(pstVencArray);
for (u32Pos = 0; u32Pos < s32Count && u32Pos < SA_VIDEO_VENC_CHN_MAX; u32Pos++) { for (u32Pos = 0; u32Pos < s32Count && u32Pos < SA_VIDEO_VENC_CHN_MAX; u32Pos++) {
pstVenCfg = &stVideoScene.astVencConfig[u32Pos]; pstVenCfg = &stVideoScene.astVencConfig[u32Pos];
saJSON *pstVenNode = saJSON_GetArrayItem(pstVencArray, u32Pos); saJSON *pstVenNode = saJSON_GetArrayItem(pstVencArray, u32Pos);
SA_JSON_NULL_ASSERT(pstVenNode); SA_JSON_NULL_ASSERT(pstVenNode);
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "enable", &pstVenCfg->bEnable, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "enable", &pstVenCfg->bEnable, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "devid", &pstVenCfg->s32VinDevId, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "devid", &pstVenCfg->s32VinDevId, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "channel", &pstVenCfg->u32VencChn, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "channel", &pstVenCfg->u32VencChn, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "smartrc", &pstVenCfg->bSmartRateCtrl, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "smartrc", &pstVenCfg->bSmartRateCtrl, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "smartsei", &pstVenCfg->bSmartSEI, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstVenNode, "smartsei", &pstVenCfg->bSmartSEI, SA_TRUE));
...@@ -499,6 +499,9 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -499,6 +499,9 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
pstVenCfg->enRcMode = VENC_RC_MODE_JPEG_FXIQP; pstVenCfg->enRcMode = VENC_RC_MODE_JPEG_FXIQP;
} else if (strcmp(strValue, "cqp") == SA_SUCCESS) { } else if (strcmp(strValue, "cqp") == SA_SUCCESS) {
pstVenCfg->enRcMode = VENC_RC_MODE_CONST_QP; pstVenCfg->enRcMode = VENC_RC_MODE_CONST_QP;
} else if (strcmp(strValue, "arcbr") == SA_SUCCESS) {
pstVenCfg->enRcMode = VENC_RC_MODE_BYPASS; // VENC_RC_MODE_ARC_BR;
pstVenCfg->enSmartEncoder = SA_VIDEO_SMART_ENCODER_QP_MAP;
} else { } else {
HAPI_LOG_E("wrong rc mode '%s'.", strValue); HAPI_LOG_E("wrong rc mode '%s'.", strValue);
} }
...@@ -510,7 +513,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -510,7 +513,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
pstRgnCfg = &pstVenCfg->astRegion[i]; pstRgnCfg = &pstVenCfg->astRegion[i];
saJSON *pstRegionNode = saJSON_GetArrayItem(pstRegionArray, i); saJSON *pstRegionNode = saJSON_GetArrayItem(pstRegionArray, i);
SA_JSON_NULL_ASSERT(pstRegionNode); SA_JSON_NULL_ASSERT(pstRegionNode);
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstRegionNode, "enable", &pstRgnCfg->bEnable, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstRegionNode, "enable", &pstRgnCfg->bEnable, SA_TRUE));
memset(strValue, 0, sizeof(strValue)); memset(strValue, 0, sizeof(strValue));
SA_JSON_NODE_ASSERT(saJSON_GetString(pstRegionNode, "osd", strValue, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetString(pstRegionNode, "osd", strValue, SA_TRUE));
if (strcmp(strValue, "image") == SA_SUCCESS) { if (strcmp(strValue, "image") == SA_SUCCESS) {
...@@ -550,7 +553,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -550,7 +553,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
stRtsp.bJpegEnable = SA_TRUE; stRtsp.bJpegEnable = SA_TRUE;
} }
} }
} }
//svp //svp
saJSON *pstSvpArray = saJSON_GetObjectItem(pstVideo, "svp");//unnecessary saJSON *pstSvpArray = saJSON_GetObjectItem(pstVideo, "svp");//unnecessary
if (SA_NULL != pstSvpArray) { if (SA_NULL != pstSvpArray) {
...@@ -559,8 +562,8 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -559,8 +562,8 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
pstSvpCfg = &stVideoScene.astSvpConfig[u32Pos]; pstSvpCfg = &stVideoScene.astSvpConfig[u32Pos];
saJSON *pstSvpNode = saJSON_GetArrayItem(pstSvpArray, u32Pos); saJSON *pstSvpNode = saJSON_GetArrayItem(pstSvpArray, u32Pos);
SA_JSON_NULL_ASSERT(pstSvpNode); SA_JSON_NULL_ASSERT(pstSvpNode);
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "enable", &pstSvpCfg->bEnable, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "enable", &pstSvpCfg->bEnable, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "devid", &pstSvpCfg->s32VinDevId, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "devid", &pstSvpCfg->s32VinDevId, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "detectfps", &pstSvpCfg->u32DetectFps, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "detectfps", &pstSvpCfg->u32DetectFps, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "structfps", &pstSvpCfg->u32StructFps, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstSvpNode, "structfps", &pstSvpCfg->u32StructFps, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetFloat(pstSvpNode, "threshold", &pstSvpCfg->fNmsThreshold, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetFloat(pstSvpNode, "threshold", &pstSvpCfg->fNmsThreshold, SA_TRUE));
...@@ -626,7 +629,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -626,7 +629,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
pstTrigCfg = &stVideoScene.astTrigConfig[u32Pos]; pstTrigCfg = &stVideoScene.astTrigConfig[u32Pos];
saJSON *pstTrigNode = saJSON_GetArrayItem(pstTriggerArray, u32Pos); saJSON *pstTrigNode = saJSON_GetArrayItem(pstTriggerArray, u32Pos);
SA_JSON_NULL_ASSERT(pstTrigNode); SA_JSON_NULL_ASSERT(pstTrigNode);
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "enable", &pstTrigCfg->bEnable, SA_FALSE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "enable", &pstTrigCfg->bEnable, SA_FALSE));
saJSON *pstCropNode = saJSON_GetObjectItem(pstTrigNode, "crop"); saJSON *pstCropNode = saJSON_GetObjectItem(pstTrigNode, "crop");
if (SA_NULL != pstCropNode) { if (SA_NULL != pstCropNode) {
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstCropNode, "x", &pstTrigCfg->stIspCropRect.s32X, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstCropNode, "x", &pstTrigCfg->stIspCropRect.s32X, SA_TRUE));
...@@ -647,7 +650,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile) ...@@ -647,7 +650,7 @@ SA_S32 STREAMERLITE_Load_Config(const SA_CHAR *strConfigFile)
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstScaleNode, "height", &pstTrigCfg->stIspDScale.u32Height, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstScaleNode, "height", &pstTrigCfg->stIspDScale.u32Height, SA_TRUE));
} }
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "memlen", &pstTrigCfg->u32MemLen, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "memlen", &pstTrigCfg->u32MemLen, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "totaltime", &pstTrigCfg->u32TotalTime, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "totaltime", &pstTrigCfg->u32TotalTime, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "maxwaittime", &pstTrigCfg->u32MaxWaitTime, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "maxwaittime", &pstTrigCfg->u32MaxWaitTime, SA_TRUE));
SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "tolerance", &pstTrigCfg->u8AeTolerance, SA_TRUE)); SA_JSON_NODE_ASSERT(saJSON_GetInt(pstTrigNode, "tolerance", &pstTrigCfg->u8AeTolerance, SA_TRUE));
...@@ -718,13 +721,13 @@ void STREAMERLITE_Help(char* sAppName) ...@@ -718,13 +721,13 @@ void STREAMERLITE_Help(char* sAppName)
} }
SA_VOID STREAMERLITE_Exit(SA_S32 s32Sig) SA_VOID STREAMERLITE_Exit(SA_S32 s32Sig)
{ {
STREAMERLITE_SCENE_S *pstSceneEntry = SA_NULL; STREAMERLITE_SCENE_S *pstSceneEntry = SA_NULL;
if (SIGINT == s32Sig || SIGTERM == s32Sig) { if (SIGINT == s32Sig || SIGTERM == s32Sig) {
if (SA_TRUE == g_bHapiRun) { if (SA_TRUE == g_bHapiRun) {
g_bHapiRun = SA_FALSE; g_bHapiRun = SA_FALSE;
HAPI_THREAD_DEINIT(g_stSceneTh); HAPI_THREAD_DEINIT(g_stSceneTh);
if (DGB_MODE_LOOP == g_s32DebugMode || DGB_MODE_DEFAULT == g_s32DebugMode) { if (DGB_MODE_LOOP == g_s32DebugMode || DGB_MODE_DEFAULT == g_s32DebugMode) {
pstSceneEntry = STREAMERLITE_GetConfig(0); pstSceneEntry = STREAMERLITE_GetConfig(0);
if (SA_TRUE == pstSceneEntry->bVideoEnable) { if (SA_TRUE == pstSceneEntry->bVideoEnable) {
...@@ -1028,7 +1031,7 @@ ENTER_NEXT_SCENE: ...@@ -1028,7 +1031,7 @@ ENTER_NEXT_SCENE:
if (g_bRtsp) { if (g_bRtsp) {
STREAMERLITE_StartRtsp(pstSceneEntry->stRtsp); STREAMERLITE_StartRtsp(pstSceneEntry->stRtsp);
} }
if (SA_TRUE == pstSceneEntry->bAudioEnable) { if (SA_TRUE == pstSceneEntry->bAudioEnable) {
s32Ret = SA_HAPI_AUDIO_Start(&stAudioAttr); s32Ret = SA_HAPI_AUDIO_Start(&stAudioAttr);
if (SA_SUCCESS != s32Ret) { if (SA_SUCCESS != s32Ret) {
...@@ -1062,7 +1065,7 @@ ENTER_NEXT_SCENE: ...@@ -1062,7 +1065,7 @@ ENTER_NEXT_SCENE:
expire_time = STREAMERLITE_UsrGetMs() + g_s32Runtime * 1000; expire_time = STREAMERLITE_UsrGetMs() + g_s32Runtime * 1000;
} }
while ((SA_TRUE == g_bHapiRun) while ((SA_TRUE == g_bHapiRun)
&& (STREAMERLITE_UsrGetMs() < expire_time) && (STREAMERLITE_UsrGetMs() < expire_time)
&& (SA_FALSE == g_bIspSwitch)) { && (SA_FALSE == g_bIspSwitch)) {
HAPI_MDELAY(1000); HAPI_MDELAY(1000);
...@@ -1075,7 +1078,7 @@ ENTER_NEXT_SCENE: ...@@ -1075,7 +1078,7 @@ ENTER_NEXT_SCENE:
} }
g_bIspSwitch = SA_FALSE; g_bIspSwitch = SA_FALSE;
} }
EXIT_VIDEO_STOP: EXIT_VIDEO_STOP:
if (SA_TRUE == pstSceneEntry->bVideoEnable) { if (SA_TRUE == pstSceneEntry->bVideoEnable) {
if (SA_TRUE == g_bVencRun) { if (SA_TRUE == g_bVencRun) {
...@@ -1149,24 +1152,24 @@ SA_S32 STREAMERLITE_ISPScene_Start(STREAMERLITE_SCENE_S *pstSceneEntry) { ...@@ -1149,24 +1152,24 @@ SA_S32 STREAMERLITE_ISPScene_Start(STREAMERLITE_SCENE_S *pstSceneEntry) {
stISPConfig.enSceneMode = SD_AUTO; stISPConfig.enSceneMode = SD_AUTO;
stISPConfig.enWdrMode = SD_WDRMODE_NONE; stISPConfig.enWdrMode = SD_WDRMODE_NONE;
stISPConfig.enNightMode = NIGHTMODE_BLACK; stISPConfig.enNightMode = NIGHTMODE_BLACK;
stISPConfig.enSensLevel = SENSITIVITY_MIDDLE; stISPConfig.enSensLevel = SENSITIVITY_MIDDLE;
stISPConfig.enLampPower = LAMPPOWER_NORMAL; stISPConfig.enLampPower = LAMPPOWER_NORMAL;
s32Ret = SA_HAPI_VIDEO_GetIspSceneAttr(&stISPConfig, &stISPSceneAttr); s32Ret = SA_HAPI_VIDEO_GetIspSceneAttr(&stISPConfig, &stISPSceneAttr);
if (SA_SUCCESS != s32Ret) { if (SA_SUCCESS != s32Ret) {
HAPI_LOG_E("SA_HAPI_VIDEO_GetIspSceneAttr[0] failed with %#x!\n", s32Ret); HAPI_LOG_E("SA_HAPI_VIDEO_GetIspSceneAttr[0] failed with %#x!\n", s32Ret);
return s32Ret; return s32Ret;
} }
s32Ret = SA_HAPI_VIDEO_IspSceneStart(&stISPSceneAttr); s32Ret = SA_HAPI_VIDEO_IspSceneStart(&stISPSceneAttr);
if (SA_SUCCESS != s32Ret) { if (SA_SUCCESS != s32Ret) {
HAPI_LOG_E("SA_HAPI_VIDEO_IspSceneStart[0] failed with %#x!\n", s32Ret); HAPI_LOG_E("SA_HAPI_VIDEO_IspSceneStart[0] failed with %#x!\n", s32Ret);
return s32Ret; return s32Ret;
} }
return s32Ret; return s32Ret;
} }
SA_VOID STREAMERLITE_ISPScene_Stop(STREAMERLITE_SCENE_S *pstSceneEntry) { SA_VOID STREAMERLITE_ISPScene_Stop(STREAMERLITE_SCENE_S *pstSceneEntry) {
SA_HAPI_VIDEO_IspSceneStop(0); SA_HAPI_VIDEO_IspSceneStop(0);
} }
#ifdef __linux__ #ifdef __linux__
...@@ -1224,7 +1227,7 @@ int streamer_ipc(int argc,char **argv) ...@@ -1224,7 +1227,7 @@ int streamer_ipc(int argc,char **argv)
} }
g_bHapiRun = SA_TRUE; g_bHapiRun = SA_TRUE;
STREAMERLITE_ISPScene_Start(pstSceneEntry); STREAMERLITE_ISPScene_Start(pstSceneEntry);
HAPI_THREAD_INIT(&g_stSceneTh, "STREAMERLITE_Work", STREAMERLITE_Work, pstSceneEntry); HAPI_THREAD_INIT(&g_stSceneTh, "STREAMERLITE_Work", STREAMERLITE_Work, pstSceneEntry);
#ifdef HAPI_SA6920 #ifdef HAPI_SA6920
...@@ -1236,14 +1239,14 @@ int streamer_ipc(int argc,char **argv) ...@@ -1236,14 +1239,14 @@ int streamer_ipc(int argc,char **argv)
stWdrResult[1].enAnlyResult = WDR_MODE_2To1_LINE; stWdrResult[1].enAnlyResult = WDR_MODE_2To1_LINE;
} else { } else {
stWdrResult[0].enAnlyResult = WDR_MODE_NONE; stWdrResult[0].enAnlyResult = WDR_MODE_NONE;
stWdrResult[1].enAnlyResult = WDR_MODE_NONE; stWdrResult[1].enAnlyResult = WDR_MODE_NONE;
} }
SA_HAPI_VIDEO_GetIspSceneWdrReslut(0, &stWdrResult[0]); SA_HAPI_VIDEO_GetIspSceneWdrReslut(0, &stWdrResult[0]);
if (stWdrResult[0].enAnlyResult != stWdrResult[1].enAnlyResult) { if (stWdrResult[0].enAnlyResult != stWdrResult[1].enAnlyResult) {
g_bIspSwitch = SA_TRUE; g_bIspSwitch = SA_TRUE;
stWdrResult[1].enAnlyResult = stWdrResult[0].enAnlyResult; stWdrResult[1].enAnlyResult = stWdrResult[0].enAnlyResult;
} }
} }
} }
#endif #endif
......
...@@ -91,14 +91,14 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL = ...@@ -91,14 +91,14 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.s32VinDevId = 0, .s32VinDevId = 0,
.enEncodeType = VENC_ENCODE_TYPE_H265, .enEncodeType = VENC_ENCODE_TYPE_H265,
.stResolution = { .stResolution = {
.u32Width = 1280, .u32Width = 1920,
.u32Height = 720, .u32Height = 1080,
}, },
.enRcMode = VENC_RC_MODE_CBR, .enRcMode = VENC_RC_MODE_BYPASS, // VENC_RC_MODE_VBR,
.u32Bitrate = 128000, .u32Bitrate = 1024000,
.astRegion = { .astRegion = {
{ {
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_IMAGE, .enType = VIDEO_RGN_TYPE_IMAGE,
.astrImageFile = "/acme/bin/logo256x128.2bpp", .astrImageFile = "/acme/bin/logo256x128.2bpp",
.stRect = { .stRect = {
...@@ -110,7 +110,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL = ...@@ -110,7 +110,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 } .u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
}, },
{ {
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_TIMESTAMP, .enType = VIDEO_RGN_TYPE_TIMESTAMP,
.stRect = { .stRect = {
.s32X = 1728, //cavas width(2560) - region width(600) - padding(32) .s32X = 1728, //cavas width(2560) - region width(600) - padding(32)
...@@ -121,24 +121,24 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL = ...@@ -121,24 +121,24 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 } .u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
} }
}, },
.bSmartRateCtrl = SA_TRUE, .bSmartRateCtrl = SA_FALSE,
.bSmartSEI = SA_FALSE, .bSmartSEI = SA_FALSE,
.enSmartEncoder = SA_VIDEO_SMART_ENCODER_NONE .enSmartEncoder = SA_VIDEO_SMART_ENCODER_QP_MAP, // SA_VIDEO_SMART_ENCODER_NONE,
}, },
{ {
.u32VencChn = 1, .u32VencChn = 1,
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.s32VinDevId = 0, .s32VinDevId = 0,
.enEncodeType = VENC_ENCODE_TYPE_H265, .enEncodeType = VENC_ENCODE_TYPE_H265,
.stResolution = { .stResolution = {
.u32Width = 1920, .u32Width = 1920,
.u32Height = 1080, .u32Height = 1080,
}, },
.enRcMode = VENC_RC_MODE_CBR, .enRcMode = VENC_RC_MODE_ADAPTIVE_VBR,
.u32Bitrate = 128000, .u32Bitrate = 1024000,
.astRegion = { .astRegion = {
{ {
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_IMAGE, .enType = VIDEO_RGN_TYPE_IMAGE,
.astrImageFile = "/acme/bin/logo256x128.2bpp", .astrImageFile = "/acme/bin/logo256x128.2bpp",
.stRect = { .stRect = {
...@@ -150,7 +150,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL = ...@@ -150,7 +150,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 } .u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
}, },
{ {
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_TIMESTAMP, .enType = VIDEO_RGN_TYPE_TIMESTAMP,
.stRect = { .stRect = {
.s32X = 1028, //cavas width(2560) - region width(600) - padding(32) .s32X = 1028, //cavas width(2560) - region width(600) - padding(32)
...@@ -161,22 +161,22 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL = ...@@ -161,22 +161,22 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 } .u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
} }
}, },
.bSmartRateCtrl = SA_TRUE, .bSmartRateCtrl = SA_FALSE,
.bSmartSEI = SA_FALSE, .bSmartSEI = SA_FALSE,
.enSmartEncoder = SA_VIDEO_SMART_ENCODER_NONE .enSmartEncoder = SA_VIDEO_SMART_ENCODER_NONE,
}, },
}, },
.astSvpConfig = { .astSvpConfig = {
{ {
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.s32VinDevId = 0, .s32VinDevId = 0,
.u32DetectFps = 5, .u32DetectFps = 15,
.u32StructFps = 1, .u32StructFps = 1,
.strDetectModelFile = "/acme/conf/yolox_nano_PersonVehicleNonvehicle_800x480.hir", .strDetectModelFile = "/acme/conf/yolox_nano_PersonVehicleNonvehicle_800x480.hir",
.fNmsThreshold = 0.65, .fNmsThreshold = 0.65,
.pDetectCallback = SAMPLE_HAPI_VIDEO_SVP_DetectHandle, .pDetectCallback = SAMPLE_HAPI_VIDEO_SVP_DetectHandle,
.pStructCallback = SAMPLE_HAPI_VIDEO_SVP_StructHandle, .pStructCallback = SAMPLE_HAPI_VIDEO_SVP_StructHandle,
.bResultImage = SA_TRUE, .bResultImage = SA_FALSE,
.stScreenBlocks.u32Rows = 5, .stScreenBlocks.u32Rows = 5,
.stScreenBlocks.u32Cols = 5, .stScreenBlocks.u32Cols = 5,
.stMotionDetect.bEnable = SA_FALSE, .stMotionDetect.bEnable = SA_FALSE,
...@@ -216,7 +216,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL = ...@@ -216,7 +216,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.fThreshold = 0.45, .fThreshold = 0.45,
}, },
.stLicensePlateDetect = { .stLicensePlateDetect = {
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.fThreshold = 0.45, .fThreshold = 0.45,
.bBlockEnable = {SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, .bBlockEnable = {SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE,
SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE,
...@@ -225,7 +225,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL = ...@@ -225,7 +225,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE} SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE}
}, },
.stLicensePlateStruct = { .stLicensePlateStruct = {
.bEnable = SA_TRUE, .bEnable = SA_FALSE,
.strRecognizeModelFile = "/acme/conf/car_plate_rec_nv12.hir", .strRecognizeModelFile = "/acme/conf/car_plate_rec_nv12.hir",
} }
} }
...@@ -606,34 +606,81 @@ SA_S32 SAMPLE_SCENE_StartRtsp(SA_VOID) ...@@ -606,34 +606,81 @@ SA_S32 SAMPLE_SCENE_StartRtsp(SA_VOID)
return SA_SUCCESS; return SA_SUCCESS;
} }
#define STREAM_FILE_NAME_LEN 256 #define STREAM_FILE_NAME_LEN 1024
SA_CHAR StreamFile[STREAM_FILE_NAME_LEN] = {"/mnt/sdcard/stream.h265"}; SA_CHAR StreamFile[SA_VIDEO_VENC_CHN_MAX][STREAM_FILE_NAME_LEN] = {"/mnt/sdcard/stream.h265"};
FILE *pVencStrFile = NULL; FILE *pVencStrFile[SA_VIDEO_VENC_CHN_MAX] = {NULL};
SA_S32 StrFd[SA_VIDEO_VENC_CHN_MAX] = {-1};
SA_VOID SAMPLE_SCENE_CloseFile(SA_VOID) SA_VOID SAMPLE_SCENE_CloseFile(SA_VOID)
{ {
if (pVencStrFile) { for (int ci = 0; ci < SA_VIDEO_VENC_CHN_MAX; ci++) {
fclose(pVencStrFile); if (pVencStrFile[ci]) {
fclose(pVencStrFile[ci]);
}
} }
} }
SA_S32 SAMPLE_SCENE_OpenFile(SA_VIDEO_VENC_CONFIG_S *pstVencConfig) SA_S32 SAMPLE_SCENE_OpenFile(SA_VIDEO_VENC_CONFIG_S *pstVencConfig)
{ {
SA_BOOL bSmartSEI = pstVencConfig->bSmartSEI; SA_U32 Bitrate;
SA_U32 Bitrate = pstVencConfig->u32Bitrate/1000;
int s32Ret = SA_SUCCESS; int s32Ret = SA_SUCCESS;
if (bSmartSEI) {
snprintf(StreamFile, STREAM_FILE_NAME_LEN, "/mnt/sdcard/stream_smart_roi_br%dk.h265", Bitrate);
} else {
snprintf(StreamFile, STREAM_FILE_NAME_LEN, "/mnt/sdcard/stream_noroi_br%dk.h265", Bitrate);
}
pVencStrFile = fopen(StreamFile, "wb"); for (int ci = 0; ci < SA_VIDEO_VENC_CHN_MAX; ci++) {
if (!pVencStrFile)
{ if (!pstVencConfig[ci].bEnable){
printf("open StreamFile[%s] failed! \n", StreamFile); continue;
s32Ret = -1; }
Bitrate = pstVencConfig[ci].u32Bitrate/1000;
if (g_pcWriteFilePath) {
if (g_pcReadFileName[ci]) {
snprintf(StreamFile[ci], STREAM_FILE_NAME_LEN, "%s/%s.265", g_pcWriteFilePath, g_pcReadFileName[ci]);
} else {
snprintf(StreamFile[ci], STREAM_FILE_NAME_LEN, "%d_%s", ci, g_pcWriteFilePath);
}
}
else if (pstVencConfig[ci].enSmartEncoder == SA_VIDEO_SMART_ENCODER_ROI) {
snprintf(StreamFile[ci], STREAM_FILE_NAME_LEN, "/mnt/sdcard/stream%d_roi_br%dk.h265", ci, Bitrate);
}
else if (pstVencConfig[ci].enSmartEncoder == SA_VIDEO_SMART_ENCODER_QP_MAP) {
snprintf(StreamFile[ci], STREAM_FILE_NAME_LEN, "/mnt/sdcard/stream%d_qpmap_br%dk.h265", ci, Bitrate);
}
else {
snprintf(StreamFile[ci], STREAM_FILE_NAME_LEN, "/mnt/sdcard/stream%d_none_br%dk.h265", ci, Bitrate);
}
pVencStrFile[ci] = fopen(StreamFile[ci], "wb");
if (!pVencStrFile[ci])
{
printf("VeChn %d open StreamFile[%s] failed! \n", ci, StreamFile[ci]);
s32Ret = -1;
return s32Ret;
}
StrFd[ci] = fileno(pVencStrFile[ci]);
if (StrFd[ci] == -1) {
printf("VeChn %d fileno fd, %s failed! \n", ci, StreamFile[ci]);
s32Ret = -1;
return s32Ret;
}
if (g_pcReadFileName[ci]) {
snprintf(YuvFileName[ci], STREAM_FILE_NAME_LEN, g_pcReadFileName[ci]);
pYuvFile[ci] = fopen(YuvFileName[ci], "rb");
if (!pYuvFile[ci])
{
printf("VeChn %d open YuvFileName[%s] failed! \n", ci, YuvFileName[ci]);
s32Ret = -1;
return s32Ret;
}
stVideoAttr.stVenc.astChannel[ci].FrameFILE = pYuvFile[ci];
stVideoAttr.stVenc.astChannel[ci].FrameFileName = g_pcReadFileName[ci];
printf("VeChn %d open YuvFileName[%s] ok! \n", ci, YuvFileName[ci]);
printf("VeChn %d open StreamFile[%s] ok! \n", ci, StreamFile[ci]);
}
} }
return s32Ret; return s32Ret;
} }
...@@ -772,8 +819,8 @@ void* SAMPLE_SCENE_VencProc(void *p) ...@@ -772,8 +819,8 @@ void* SAMPLE_SCENE_VencProc(void *p)
} }
if (g_bWriteFile && pVencStrFile && (pstVencChnAttr->u32ChnId == 0)) { if (g_bWriteFile && pVencStrFile && (pstVencChnAttr->u32ChnId == 0)) {
fwrite(pstPack->pu8Addr, pstPack->u32Len, 1, pVencStrFile); fwrite(pstPack->pu8Addr, pstPack->u32Len, 1, pVencStrFile[VeChn]);
fflush(pVencStrFile); fflush(pVencStrFile[VeChn]);
} }
} else { } else {
break; break;
......
...@@ -17,7 +17,7 @@ machine=`uname -m` ...@@ -17,7 +17,7 @@ machine=`uname -m`
if [ ${machine} = "aarch64" ];then if [ ${machine} = "aarch64" ];then
/sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x68000000,128M:sram,0,0x201E0000,4352K /sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x68000000,128M:sram,0,0x201E0000,4352K
else else
/sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x64000000,192M:sram,0,0x201E0000,4352K /sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x66000000,160M:sram,0,0x201E0000,4352K
fi fi
# dtbo # dtbo
mkdir -p /sys/kernel/config/device-tree/overlays/sdk mkdir -p /sys/kernel/config/device-tree/overlays/sdk
......
...@@ -15,7 +15,7 @@ machine=`uname -m` ...@@ -15,7 +15,7 @@ machine=`uname -m`
if [ ${machine} = "aarch64" ];then if [ ${machine} = "aarch64" ];then
/sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x68000000,128M:sram,0,0x201E0000,4352K /sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x68000000,128M:sram,0,0x201E0000,4352K
else else
/sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x64000000,192M:sram,0,0x201E0000,4352K /sbin/insmod ${ko_dir}/osal/osaldrv.ko anony=1 mmz_allocator=superacme mmz=anonymous,0,0x66000000,160M:sram,0,0x201E0000,4352K
fi fi
# dtbo # dtbo
mkdir -p /sys/kernel/config/device-tree/overlays/sdk mkdir -p /sys/kernel/config/device-tree/overlays/sdk
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment