Commit c8984e1f authored by hebohua's avatar hebohua

pt2 support qpmap

parent 02739e2a
Pipeline #60 failed with stages
......@@ -155,7 +155,7 @@
&i2c0PL {
clock-frequency = <10000>;
/*sa8900_0: codec@1a{
sa8900_0: codec@1a{
compatible = "microbt,sa8900";
pinctrl-names = "default";
#sound-dai-cells = <0>;
......@@ -164,38 +164,20 @@
spk-ctrl = <0>;
powerup-gpios = <&portd 1 GPIO_ACTIVE_HIGH>;
dacclk-sel = <0>; //0:dacclk=adcclk 1:dacclk=dacclk/adcclk=adcclk
};*/
};
};
&i2c2ACME {
clock-frequency = <100000>; /*i2c 100k*/
clock-frequency = <10000>;
scl-gpios = <&portf 1 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 {
clock-frequency = <24000000>;
};
&i2s1_clk {
clock-frequency = <8192000>;
clock-frequency = <12288000>;
};
&i2s0PL{
&i2s1ACME {
status = "disabled";
};
......@@ -204,18 +186,14 @@
simple-audio-card,frame-master = <&i2s0_dailink_master>;
simple-audio-card,format = "i2s";
simple-audio-card,cpu {
sound-dai = <&i2s1ACME>;
sound-dai = <&i2s0PL>;
};
i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&es8388_2>;
clocks = <&i2s1_clk>;
sound-dai = <&sa8900_0>;
clocks = <&i2s0_clk>;
clock-names = "mclk";
};
/*i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&pdm_codec>;
};*/
};
&sound_pdm{
......@@ -234,7 +212,3 @@
};
};
};
&i2c3ACME {
status = "disabled";
};
\ No newline at end of file
......@@ -25,7 +25,7 @@
};
chosen {
bootargs = "console=ttyS2,115200 mem=64M quiet";
bootargs = "console=ttyS2,115200 mem=96M quiet";
stdout-path = "serial2:115200n8";
};
......@@ -156,7 +156,7 @@
&i2c0PL {
clock-frequency = <10000>;
sa8900_0: codec@1a{
/*sa8900_0: codec@1a{
compatible = "microbt,sa8900";
pinctrl-names = "default";
#sound-dai-cells = <0>;
......@@ -165,20 +165,38 @@
spk-ctrl = <0>;
powerup-gpios = <&portd 1 GPIO_ACTIVE_HIGH>;
dacclk-sel = <0>; //0:dacclk=adcclk 1:dacclk=dacclk/adcclk=adcclk
};
};*/
};
&i2c2ACME {
clock-frequency = <10000>;
clock-frequency = <100000>; /*i2c 100k*/
scl-gpios = <&portf 1 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 {
clock-frequency = <12288000>;
clock-frequency = <24000000>;
};
&i2s1_clk {
clock-frequency = <8192000>;
};
&i2s1ACME {
&i2s0PL{
status = "disabled";
};
......@@ -187,14 +205,18 @@
simple-audio-card,frame-master = <&i2s0_dailink_master>;
simple-audio-card,format = "i2s";
simple-audio-card,cpu {
sound-dai = <&i2s0PL>;
sound-dai = <&i2s1ACME>;
};
i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&sa8900_0>;
clocks = <&i2s0_clk>;
sound-dai = <&es8388_2>;
clocks = <&i2s1_clk>;
clock-names = "mclk";
};
/*i2s0_dailink_master:simple-audio-card,codec {
sound-dai = <&pdm_codec>;
};*/
};
&sound_pdm{
......@@ -210,6 +232,10 @@
conf {
pins = "PORTE1";
drive-strength = <1>;
};
};
};
};
&i2c3ACME {
status = "disabled";
};
\ No newline at end of file
......@@ -68,7 +68,7 @@
#define FINSH_USING_MSH
#define FINSH_THREAD_NAME "tshell"
#define FINSH_THREAD_PRIORITY 20
#define FINSH_THREAD_STACK_SIZE 4096
#define FINSH_THREAD_STACK_SIZE 2048
#define FINSH_USING_HISTORY
#define FINSH_HISTORY_LINES 5
#define FINSH_USING_SYMTAB
......@@ -287,33 +287,32 @@
#define BSP_USING_PWM5
#define BSP_USING_PWM6
#define BSP_USING_PWM7
#define BSP_USING_PWM10
#define BSP_USING_PWM11
#define BSP_USING_I2C
#define BSP_USING_I2C0
#define BSP_USING_I2C1
#define BSP_USING_I2C2
#define BSP_USING_I2C3
#define SA_I2C_TEST
#define BSP_USING_STAR
#define BSP_USING_WDT
#define BSP_MOUDLE_WITHIN_WDT
#define BSP_USING_DMAC
#define BSP_USING_MAILBOX
#define BSP_USING_NANO_FILTER
#define PWM_ID_WL 10
#define PWM_ID_IR 11
#define PWM_ID_WL 1
#define PWM_ID_IR -1
#define IRCUT_DRV_EN_PIN 89
#define IRCUT_DRV_SPI_CSN_PIN 86
#define SNS_OS04D10
#define SNS_OS04L10
#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_SNS_RST_PIN 27
#define BSP_USING_SPI
#define BSP_USING_PIN
#define BSP_USE_TESTMODULE
/* Board extended module Drivers */
#define BSP_USING_RPMSG
#define BSP_USING_PMIC
#define PMIC_SA9710
#define BSP_TEST_PMIC
#define DEFAULT_SELECT
/* sa692x ext Config */
......@@ -323,7 +322,8 @@
#define SA_USEING_LISTENING_PROCEE
#define RT_USING_CPU_USAGE
#define BSP_USING_SIMPLE_CMD
#define BOARD_PLATFORM 1
#define BOARD_PLATFORM 3
#define BOOT_FROM_SFC
#define A55_USING_QSPI
#endif
......@@ -6,28 +6,37 @@
### 2.1 配置mcu与A55工具链的环境变量
例如:
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 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
### 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() {
mkdir -p 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/
fi
fi
if [ "$type" == "outdoor-ipc" ]; then
echo "Copying ipc files..."
mkdir -p 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/
fi
fi
}
rootfs_copy_file() {
......@@ -72,6 +72,7 @@ rootfs_copy_file() {
if [ "$type" == "qa" ];then
echo *****ONLY TEST****
cp sdk/lib/libArcEncCam*.so system_temp/lib/
cp sdk/lib/libsvp_*.so system_temp/lib/
cp sdk/conf system_temp/ -r
cp common/conf/* system_temp/conf/ -rf
......@@ -157,7 +158,7 @@ if [ "$1" == "glasses" ] || [ "$1" == "outdoor-ipc" ] || [ "$1" == "emmc" ]; the
set +e
elif [ "$1" == "clean" ]; then
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_emmc
rm -rf ../system_temp
......@@ -187,7 +188,7 @@ copy_files "$1"
mkdir system_temp/lib/modules -p
mkdir system_temp/usr -p
if [ -d "tools" ]; then
if [ -d "tools" ]; then
# Get new controller
make_module tools/controller/ controller sdk/bin/
make_module tools/comm/ libtool_comm.so sdk/opensource/lib/
......@@ -220,6 +221,8 @@ copy_files "$1"
cp -d sdk/lib/libsvp_vnne.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/libimu_open.so* system_temp/lib/
cp sdk/opensource/lib/libjson_open.so* system_temp/lib/
......@@ -315,14 +318,14 @@ copy_files "$1"
cp sdk/lib/modules/vnne.ko system_temp/lib/modules/
cp sdk/lib/modules/vpss.ko system_temp/lib/modules/
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/libc.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/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/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 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/libsmartLamp.so system_temp/lib/
......@@ -332,7 +335,7 @@ copy_files "$1"
cp sdk/bin/controller system_temp/bin/
cp sdk/bin/HeronTest 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/simhei.ttf system_temp/bin/
cp sdk/bin/tzc400 system_temp/bin/
......@@ -351,15 +354,16 @@ copy_files "$1"
make clean
make
cd -
cd sdk/sample/source/sample_hapi_media/
make clean
make
cd -
# cd sdk/sample/source/sample_hapi_media/
# make clean
# make
# cd -
set +e
git checkout sdk/sample/source/mkconfig
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/bin/ipc_*.json system_temp/bin/
# cp sdk/sample/source/sample_hapi_media/sample_hapi_media system_temp/bin/streamer_media
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/usr/* system_temp/usr/ -rf
......@@ -372,7 +376,7 @@ copy_files "$1"
# 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
cd system_temp/lib/
# rm libfdk-aac.so
# ln -s libfdk-aac.so.* libfdk-aac.so
......@@ -387,7 +391,7 @@ copy_files "$1"
rm libvqe.so
ln -s libvqe.so.* libvqe.so
cd -
cp sdk/scripts system_temp/ -rf
cp common/bin/* system_temp/bin/ -rf
......
{
"doc": "lite",
"version": "1.0.1.1",
"#note": [
"#note": [
"workmode: trigger, deepsleep, aor, normal, hibernate",
"scene: record, play, talk, record_play, trigger",
"soundmode: mono, stereo",
......@@ -24,45 +24,45 @@
"video": {
"enable": 1,
"vin": [
{
{
"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,
"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" ],
"algfile": "/acme/conf/4d10/aisp_4M.bin"
"algfile": "/acme/conf/4d10/aisp_4M.bin"
}
],
"venc": [
{
{
"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": [
{
"enable": 1, "osd": "image",
{
"enable": 0, "osd": "image",
"rect": { "x": 32, "y": 32, "width": 256, "height": 128 },
"color": [ 16777215, 6171602, 16745541 ],
"file": "/acme/bin/logo256x128.2bpp"
},
{
"enable": 1, "osd": "time",
"rect": { "x": 1728, "y": 1344, "width": 800, "height": 64 },
{
"enable": 0, "osd": "time",
"rect": { "x": 1728, "y": 1344, "width": 800, "height": 64 },
"color": [ 16777215, 6171602, 16745541 ]
}
]
},
{
{
"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": [
{
"enable": 1, "osd": "image",
{
"enable": 1, "osd": "image",
"rect": { "x": 32, "y": 32, "width": 256, "height": 128 },
"color": [ 16777215, 6171602, 16745541 ],
"file": "/acme/bin/logo256x128.2bpp"
},
{
"enable": 1, "osd": "time",
"rect": { "x": 448, "y": 624, "width": 800, "height": 64 },
{
"enable": 1, "osd": "time",
"rect": { "x": 448, "y": 624, "width": 800, "height": 64 },
"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 {
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_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_E;
......
......@@ -359,6 +359,14 @@ typedef struct saVENC_WORK_MODE_INFO{
VENC_WORK_MODE_CH_INFO stJpeg[VENC_MAX_JPEG_CHN_NUM];
}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
{
SA_U8* pUserData;
......@@ -371,11 +379,19 @@ typedef struct saVIDEO_SEI_S
SA_U32 u32PayloadNum;
} 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
{
VIDEO_FRAME_INFO_S stFrameInfo;
VENC_ROI_ATTR_S *pstRoiAttr;
VIDEO_SEI_S stSei;
USER_RC_INFO_S stUserRcInfo;
} USER_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);
* @note
*/
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
* @details
......
libispalg.so.2.5.0.9.1
\ No newline at end of file
libispalg.so.2.5.0.9.6
\ No newline at end of file
libive.so.2.5.0.9.1
\ No newline at end of file
libive.so.2.5.0.9.6
\ No newline at end of file
liblapi.so.2.5.0.9.1
\ No newline at end of file
liblapi.so.2.5.0.9.6
\ No newline at end of file
libmapi.so.2.5.0.9.1
\ No newline at end of file
libmapi.so.2.5.0.9.6
\ No newline at end of file
libvqe.so.2.5.0.9.1
\ No newline at end of file
libvqe.so.2.5.0.9.6
\ No newline at end of file
......@@ -221,7 +221,7 @@ typedef enum {
} SA_VIDEO_SNS_TYPE_E;
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_INDOOR = 2,
SA_VIDEO_ISP_BIN_PATH_COLOR_AISP = 3,
......@@ -340,6 +340,7 @@ typedef struct {
VENC_CHN u32ChnId;
SA_F32 f32Fps;
MPP_CHN_S stSrc;
SA_U32 u32Bitrate;
VENC_USER_BUF_S* stUserBuf;
VENC_RECV_PIC_PARAM_S stRecvParam;
VENC_CHN_ATTR_S stChnAttr;
......@@ -398,7 +399,7 @@ typedef struct saSA_VIDEO_SVP_RESULT_TARGET_S{
} SA_VIDEO_SVP_RESULT_TARGET_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_S;
......@@ -408,8 +409,8 @@ typedef SA_VOID (*SA_VIDEO_SVP_RESULT_STRUCT_CB)(VI_DEV u32ViDevId, SA_U32 u32Se
//SVP MAPI输入
typedef struct saSA_VIDEO_SVP_CHN_ATTR_S{
SA_BOOL bEnable;
SVP_CHN u32ChnId;
SA_BOOL bOfflineSendFirst;
SVP_CHN u32ChnId;
SA_BOOL bOfflineSendFirst;
SVP_CHN_PARAM_S stChnAttr;
SA_VOID *pSvpAlgHd;
} SA_VIDEO_SVP_CHN_ATTR_S;
......
......@@ -52,9 +52,23 @@ extern "C" {
#define HAPI_CALLOC calloc
#define HAPI_FREE free
#define HAPI_MDELAY(m) usleep(m * 1000)
#define HAPI_LOG_I printf
#define HAPI_LOG_W printf
#define HAPI_LOG_E printf
#if __linux__
#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>
typedef pthread_t HAPI_THREAD_T;
......@@ -221,7 +235,7 @@ typedef enum {
} SA_VIDEO_SNS_TYPE_E;
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_INDOOR = 2,
SA_VIDEO_ISP_BIN_PATH_COLOR_AISP = 3,
......@@ -339,6 +353,7 @@ typedef struct {
SA_BOOL bEnable;
VENC_CHN u32ChnId;
SA_F32 f32Fps;
SA_U32 u32Bitrate;
MPP_CHN_S stSrc;
VENC_USER_BUF_S* stUserBuf;
VENC_RECV_PIC_PARAM_S stRecvParam;
......@@ -398,7 +413,7 @@ typedef struct saSA_VIDEO_SVP_RESULT_TARGET_S{
} SA_VIDEO_SVP_RESULT_TARGET_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_S;
......@@ -408,8 +423,8 @@ typedef SA_VOID (*SA_VIDEO_SVP_RESULT_STRUCT_CB)(VI_DEV u32ViDevId, SA_U32 u32Se
//SVP MAPI输入
typedef struct saSA_VIDEO_SVP_CHN_ATTR_S{
SA_BOOL bEnable;
SVP_CHN u32ChnId;
SA_BOOL bOfflineSendFirst;
SVP_CHN u32ChnId;
SA_BOOL bOfflineSendFirst;
SVP_CHN_PARAM_S stChnAttr;
SA_VOID *pSvpAlgHd;
} SA_VIDEO_SVP_CHN_ATTR_S;
......
......@@ -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];
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)
{
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
}
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) {
HAPI_LOG_E("jpeg do not support smart function!\n");
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,
/*get VENC_RC_ATTR_S*/
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.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,
memcpy(pstChnAttr->stChnAttr.stRcAttr.stAvbr.u8BrCoef, au8BrCoef, VENC_AVBR_COEF_NUM);
break;
case VENC_RC_MODE_BYPASS:
#ifdef XIANGSU_RC
pstChnAttr->u32Bitrate = pstSceneChn->astVencConfig[u32Chn].u32Bitrate;
break;
#endif
/* todo: code */
break;
default:
......@@ -552,6 +569,43 @@ SA_S32 SA_INNER_HAPI_VENC_StartChn(SA_VIDEO_VENC_CHN_ATTR_S *pstVencChnAttr)
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
|| pstVencChnAttr->stChnAttr.stVencAttr.eWorkMode == VENC_WORK_MODE_OFFLINE_BIND) {
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)
}
}
#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);
if (s32Ret != SA_SUCCESS) {
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_
pstVpssChnAttr->stChnAttr.bTextureDataEn = SA_FALSE;
pstVpssChnAttr->stChnAttr.bSramEn = SA_FALSE;
pstVpssChnAttr->stChnAttr.bCacheEn = SA_FALSE;
pstVpssChnAttr->stChnAttr.bCacheEn = SA_TRUE;
pstVpssChnAttr->stCropAttr.bCropEn = SA_FALSE;
return SA_SUCCESS;
......
......@@ -6,6 +6,7 @@ CFLAGS := -g -Wall -fpic
CFLAGS += $(MAPI_SDK_SYS_INC_DIR)
LDFLAGS += $(MAPI_SDK_SYS_LIB_DIR)
LDFLAGS += $(MAPI_SDK_SYS_LD_FLAGS)
LDFLAGS += -lArcEncCam1.0.0.6.1
LDFLAGS += -lhapi_open -lrtsp_open -lfreetype -limu_open -ltool_comm
DIR_LIB := $(src)
......
......@@ -91,14 +91,14 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.s32VinDevId = 0,
.enEncodeType = VENC_ENCODE_TYPE_H265,
.stResolution = {
.u32Width = 1280,
.u32Height = 720,
.u32Width = 1920,
.u32Height = 1080,
},
.enRcMode = VENC_RC_MODE_CBR,
.u32Bitrate = 128000,
.enRcMode = VENC_RC_MODE_BYPASS, // VENC_RC_MODE_VBR,
.u32Bitrate = 1024000,
.astRegion = {
{
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_IMAGE,
.astrImageFile = "/acme/bin/logo256x128.2bpp",
.stRect = {
......@@ -110,7 +110,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
},
{
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_TIMESTAMP,
.stRect = {
.s32X = 1728, //cavas width(2560) - region width(600) - padding(32)
......@@ -121,24 +121,24 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
}
},
.bSmartRateCtrl = SA_TRUE,
.bSmartRateCtrl = 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,
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.s32VinDevId = 0,
.enEncodeType = VENC_ENCODE_TYPE_H265,
.stResolution = {
.u32Width = 1920,
.u32Height = 1080,
},
.enRcMode = VENC_RC_MODE_CBR,
.u32Bitrate = 128000,
.enRcMode = VENC_RC_MODE_ADAPTIVE_VBR,
.u32Bitrate = 1024000,
.astRegion = {
{
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_IMAGE,
.astrImageFile = "/acme/bin/logo256x128.2bpp",
.stRect = {
......@@ -150,7 +150,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
},
{
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.enType = VIDEO_RGN_TYPE_TIMESTAMP,
.stRect = {
.s32X = 1028, //cavas width(2560) - region width(600) - padding(32)
......@@ -161,22 +161,22 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.u32RgbColor = { 0xFFFFFF, 0x5E2BD2, 0xFF8445 }
}
},
.bSmartRateCtrl = SA_TRUE,
.bSmartRateCtrl = SA_FALSE,
.bSmartSEI = SA_FALSE,
.enSmartEncoder = SA_VIDEO_SMART_ENCODER_NONE
.enSmartEncoder = SA_VIDEO_SMART_ENCODER_NONE,
},
},
.astSvpConfig = {
{
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.s32VinDevId = 0,
.u32DetectFps = 5,
.u32DetectFps = 15,
.u32StructFps = 1,
.strDetectModelFile = "/acme/conf/yolox_nano_PersonVehicleNonvehicle_800x480.hir",
.fNmsThreshold = 0.65,
.pDetectCallback = SAMPLE_HAPI_VIDEO_SVP_DetectHandle,
.pStructCallback = SAMPLE_HAPI_VIDEO_SVP_StructHandle,
.bResultImage = SA_TRUE,
.bResultImage = SA_FALSE,
.stScreenBlocks.u32Rows = 5,
.stScreenBlocks.u32Cols = 5,
.stMotionDetect.bEnable = SA_FALSE,
......@@ -216,7 +216,7 @@ static SA_VIDEO_CONFIG_S SCENE_CONFIG_NORMAL =
.fThreshold = 0.45,
},
.stLicensePlateDetect = {
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.fThreshold = 0.45,
.bBlockEnable = {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 =
SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE, SA_TRUE}
},
.stLicensePlateStruct = {
.bEnable = SA_TRUE,
.bEnable = SA_FALSE,
.strRecognizeModelFile = "/acme/conf/car_plate_rec_nv12.hir",
}
}
......@@ -606,34 +606,81 @@ SA_S32 SAMPLE_SCENE_StartRtsp(SA_VOID)
return SA_SUCCESS;
}
#define STREAM_FILE_NAME_LEN 256
SA_CHAR StreamFile[STREAM_FILE_NAME_LEN] = {"/mnt/sdcard/stream.h265"};
FILE *pVencStrFile = NULL;
#define STREAM_FILE_NAME_LEN 1024
SA_CHAR StreamFile[SA_VIDEO_VENC_CHN_MAX][STREAM_FILE_NAME_LEN] = {"/mnt/sdcard/stream.h265"};
FILE *pVencStrFile[SA_VIDEO_VENC_CHN_MAX] = {NULL};
SA_S32 StrFd[SA_VIDEO_VENC_CHN_MAX] = {-1};
SA_VOID SAMPLE_SCENE_CloseFile(SA_VOID)
{
if (pVencStrFile) {
fclose(pVencStrFile);
for (int ci = 0; ci < SA_VIDEO_VENC_CHN_MAX; ci++) {
if (pVencStrFile[ci]) {
fclose(pVencStrFile[ci]);
}
}
}
SA_S32 SAMPLE_SCENE_OpenFile(SA_VIDEO_VENC_CONFIG_S *pstVencConfig)
{
SA_BOOL bSmartSEI = pstVencConfig->bSmartSEI;
SA_U32 Bitrate = pstVencConfig->u32Bitrate/1000;
SA_U32 Bitrate;
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");
if (!pVencStrFile)
{
printf("open StreamFile[%s] failed! \n", StreamFile);
s32Ret = -1;
for (int ci = 0; ci < SA_VIDEO_VENC_CHN_MAX; ci++) {
if (!pstVencConfig[ci].bEnable){
continue;
}
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;
}
......@@ -772,8 +819,8 @@ void* SAMPLE_SCENE_VencProc(void *p)
}
if (g_bWriteFile && pVencStrFile && (pstVencChnAttr->u32ChnId == 0)) {
fwrite(pstPack->pu8Addr, pstPack->u32Len, 1, pVencStrFile);
fflush(pVencStrFile);
fwrite(pstPack->pu8Addr, pstPack->u32Len, 1, pVencStrFile[VeChn]);
fflush(pVencStrFile[VeChn]);
}
} else {
break;
......
......@@ -17,7 +17,7 @@ machine=`uname -m`
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
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
# dtbo
mkdir -p /sys/kernel/config/device-tree/overlays/sdk
......
......@@ -15,7 +15,7 @@ machine=`uname -m`
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
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
# dtbo
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