Hi3556V200代码

关键代码

ISP:
/amp/a7_liteos/mpp/component/isp/user/sensor/hi3559v200/yx2m4u/yx2m4u_cmos.c
/amp/a7_liteos/mpp/component/isp/user/sensor/hi3559v200/yx2m4u/yx2m4u_sensor_ctl.c
yx2m4u_init()

make menuconfig 对应的全局配置文件:SDK_V1.0.1.2/.config

里面配置了主芯片(CONFIG_HI3556V200)、
Flash Configure(CONFIG_SPINOR=y) 配置flash内存类型、
Sensor Configure(CONFIG_SNS0_YX2M4U=y) 配置VI输入sensor、
Build Configure(CONFIG_ROOTFS_JFFS2=y;CONFIG_APPFS_JFFS2=y)、
User Configuration(CONFIG_CVBS_OUT=y)、视频VO输出类型


1.配置文件

yx2m4u/config.ini sensor输入配置:
(reference/samplecam/modules/scene/inicfg/hi3559v200/yx2m4u/config.ini)

配置亮度,对比度,分辨率resolution,帧率framerate,色温,翻转等参数。
开关:图像增强,十字光标,BT1120输出开关等。

[Config]
luma = 50  ; 亮度[0,100]
contrast = 50  ; 对比度[0,100]
resolution = 1  ; 分辨率, 0:1080P 1:720P
framerate = 1  ; 帧率,  0:50fps 1:30fps 2:25fps 3:20fps 4:15fps 5:60fps 6:50+25
colortemp = 0  ; 色温, 0:自动色温 其他:手动色温[1500,15000]
flip = 0  ; 翻转, 0:原图 1:镜像 2:倒置 3:镜像及倒置
gamma = 0

[Switch]
3dnr = 0  ;  图像增强功能(3D降噪开关), 0:关闭 1-3:3级调节,3级最高
daynight = 0  ; 彩色黑白转换开关,0:彩色 1:自动转换 2:手动黑白
bt1120 = 0  ; BT1120输出开关, 0:关 1:开
ioenable = 0 ; 是否由IO_R线控制BT1120输出, 0:由串口命令控制 1:由IO_R线控制
cross = 0  ; 十字光标开关, 0:关 1:开
abate = 0  ; 强光抑制开关, 0:关 1-3档依次增强
dehaze = 0  ; 去雾开关, 0:关 1-4档依次增强
ldc = 0  ; 畸变校正开关, 0:关 1-5档依次增强
lowdelay = 0 ; 低延时开关,0:关,1:开
selftest = 1 ; 自检开关,0:关,1:开
wdr = 0 ; 宽动态开关,0:关,1:开

Hi3559V200_MobileCam_SDK_V1.0.1.2/reference/samplecam/rootfs/Makefile

根据配置,二次设置输出帧率。

ifeq ($(CONFIG_SDI_OUT),y)
    @sed -i 's/framerate *= *[0-9] *;/framerate = 2  ;/g;s/flip *= *[0-9] *;/flip = 0  ;/g' $(APPFS_PATH)/sharefs/config.ini
else ifeq ($(CONFIG_BT1120_OUT),y)
    @sed -i 's/framerate *= *[0-9] *;/framerate = 1  ;/g;s/flip *= *[0-9] *;/flip = 0  ;/g' $(APPFS_PATH)/sharefs/config.ini
else ifeq ($(CONFIG_PAL_OUT),y)
    @sed -i 's/framerate *= *[0-9] *;/framerate = 2  ;/g;s/flip *= *[0-9] *;/flip = 3  ;/g' $(APPFS_PATH)/sharefs/config.ini
else ifeq ($(CONFIG_CVBS_OUT),y)
    @sed -i 's/framerate *= *[0-9] *;/framerate = 0  ;/g;s/flip *= *[0-9] *;/flip = 3  ;/g' $(APPFS_PATH)/sharefs/config.ini
endif

g_resolution = getinikeyint("Config", "resolution", "/app/sharefs/config.ini");
取得配置文件里面的配置数据
CONFIG_CVBS_OUT (SDK_V1.0.1.2/.config中)。

#if defined(CONFIG_CVBS_OUT) // 是否定义了CONFIG_CVBS_OUT
    ...
#endif

rootfs/Makefile(Hreference/samplecam/rootfs/Makefile)里面的 framerate, day, night,
是配置VO输出的分辨率:g_outframe, g_resolution

#if defined(CONFIG_SDI_OUT) || defined(CONFIG_BT1120_OUT)
    CHECK_RET(InitMedia(wdr_enable, PARAM_DISPLAY_TYPE_BT1120, g_outframe, g_resolution));

配置中的选项备选项,如何添加?

sensor配置修改:[yx2m4u_sensor_ctl.c]
(MobileCam_SDK_V1.0.1.2/amp/a7_liteos/mpp/component/isp/user/sensor/hi3559v200/yx2m4u/yx2m4u_sensor_ctl.c)
2m4u_i2c_init() // 初始化i2c
yx2m4u_init() // 根据配置的帧率、分辨率、模式,给2m4u寄存器写入值。
(reference/samplecam/rootfs/appfs/sharefs/config.ini)
g_FarmeRate = getinikeyint("Config", "framerate", "/app/sharefs/config.ini");

make menuconfig:

对应的配置文件,保存在SDK_V1.0.1.2/.config中.
make menuconfig:配置输入输出芯片。主芯片Hi3556V200、ProductType...
Flash配置:spinor,spinand,emmc
配置输出 CVBS_OUT, 输入sensor:yx2m4u


2.vio:(reference/samplecam/app/vio/vio_main.c)

vio_main.c/ main();

2.0 InitGPIO();
HI_MAPI_Sys_Init();
HI_MSG_CLIENT_Init();
YX_UARTMSG_ServerInit();

2.1 GM7122 芯片初始化,set i2c device address,主模式推荐参数.
ret = ioctl(fd, I2C_SLAVE_FORCE, gm7122_i2c_addr >> 1);
2.2 获取配置文件中的[Config] wdr,framerate,resolution等字段。
g_resolution = getinikeyint("Config", "resolution", "/app/sharefs/config.ini"); // 0:1080p; 1:720p
2.3 根据读取的配置config,设置VI, VO的分辨率和帧率。
CHECK_RET(InitMedia(wdr_enable, PARAM_DISPLAY_TYPE_BT1120, g_outframe, g_resolution));
2.4 InitMedia(), DeinitMedia()

static HI_VOID DeinitMedia(HI_VOID)
{
    HI_PDT_MEDIA_VideoOutStop();
    HI_PDT_MEDIA_VideoOutDeinit();
    HI_PDT_MEDIA_VideoDeinit();
    HI_PDT_MEDIA_Deinit();
}
// 初始化VI,VO
static HI_S32 InitMedia(HI_S32 snsIdx, PARAM_DisplayType dispType, int frame, int resolution)
{
    MEDIA_Cfg mediaCfg;
    CHECK_RET(HI_PARAM_GetMediaCfg(snsIdx, dispType, &mediaCfg, frame, resolution));
    CHECK_RET(HI_PDT_MEDIA_Init(&mediaCfg.viVpssMode, &mediaCfg.vbCfg));
    CHECK_RET(HI_PDT_MEDIA_VideoInit(&mediaCfg.videoCfg));
    CHECK_RET(HI_PDT_MEDIA_VideoOutInit(&mediaCfg.videoOutCfg));
    CHECK_RET(HI_PDT_MEDIA_VideoOutStart(&mediaCfg.videoOutCfg));
    extern HI_S32 PDT_INIT_OSD();
    PDT_INIT_OSD();
    YX_UARTMSG_ServerDefault();
    Set_LOCAL_CAC();   // 去紫边
    return HI_SUCCESS;
exit:
    DeinitMedia();
    return HI_FAILURE;
}

2.5 CONFIG_BT1120_OUT
int value = gpio_get_in_value(gpio_chip_num, gpio_offset); // 读取gpio中的值。
Contrl_Image_Color,设置彩色图像,黑白图像。
hi_gpio.c 设置gpio的值。

vio_params.c vio参数的封装。


3. app初始化相关代码(reference/samplecam/modules/init/amp/liteos/src/hi_product_init_main.c)

app_init(HI_VOID)
// 加入printf日志,能在LiteOS端,通过串口看到输出。

/reference/samplecam/modules/init/amp/liteos/src/hi_product_init_hi3559v200.c
load_mpp(void)

视频sensor采集,vi 传递给芯片。
芯片处理后,传输给VO。

4.通信部分

Linux与LiteOS 如何通信的?
reference/samplecam/app/vio/yx_uartmsg.c 封装设置指令,查询指令
YX_UARTMSG_RecvCbk 根据msgId,区分不同的msg。

/middleware/ndk/code/mediaserver/vcap/mapi_vcap.
HI_MAPI_VCAP_GetAttrEx()
HI_MAPI_VCAP_SetAttrEx() 的作用是?

hi_uartmsg_server.c

HI_MSG_CLIENT_Init
YX_UARTMSG_ServerInit 通信端初始化?

hi_appcomm_msg.c

MSG_Handler(), MSG_Response() 接收消息,返回msg结果。

设置BT656 显示配置,输出分辨率:720*576

static HI_VOID GenerateBT656DisplayCfg(MEDIA_DispCfg* dispCfg, SIZE_S* dispSize, int frame, int resolution)
{
    dispCfg->dispAttr.stPubAttr.u32BgColor = 0xff;
    dispCfg->dispAttr.stPubAttr.enIntfType = VO_INTF_BT656;

#if 1
    dispCfg->dispAttr.stUserInfoAttr.u32DevFrameRate = 25;
    dispCfg->dispAttr.stPubAttr.enIntfSync = VO_OUTPUT_PAL;  // 25fps * 2
    dispSize->u32Width  = 720;
    dispSize->u32Height = 576;

小需求改动:
sensor50Fps,BT1120 25Fps, black
yx2m4u_sensor_ctl.c~ yx2m4u_4lane_1080P_50_12bit_init(); // 设置sensor的输入帧率
/reference/samplecam/modules/scene/inicfg/hi3559v200/yx2m4u/config.ini
framerate,daynight设置输出帧率25fps,手动黑白。

修改双核通信使用HI_MSG_SendSync接口. 发送消息。
YX_UARTMSG_Get3DNR--> HI_MSG_SendSync
hi_uartmsg_server.h .c 定义的方法,在哪里调用?
hi_uartmsg_defines.h

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容