2272943826

2272943826

0个粉丝

24

问答

0

专栏

8

资料

2272943826  发布于  2016-09-28 11:20:01
采纳率 0%
24个问答
5870

[已解决]分享3516a+imx178 优化rtsp图传效果 参考ljx6233535的帖子:3516a/d+imx290

 

[i=s] 本帖最后由 2272943826 于 2016-11-24 11:04 编辑 [/i]

mpp/sample 里面我没有找到相关资料。 下面参考论坛资料, 分享3516a+imx178 优化rtsp图传效果

[color=Red]具体步骤: 1 put directory hp-ipc into sdk.../mpp/sample/ 2 cd ipc_imx178 3 make [/color]

使用方法: 1、参照自己的Sensor的接口方式,修改hp_vi.c 中 static HI_VOID viAttrInit(const IPC_VEDIO_S* pstIpcVedio,VI_ATTR_S **pstViAttr)函数中的配置参数(接口,时序,掩码等等),注意,不用修改图像格式和帧率,这个是上层自动传下来的。 2、参照hp_ipc.c中main函数,修改自己想要的大小和帧率,码流数量。 int main() { FARMAT_S stFmt_a[3] = { {PIC_HD720,30}, {PIC_VGA,30}, {PIC_QVGA,30} }; IPC_Init(3,stFmt_a);//3表示几路,stFmt_a定义每一路的大小和帧率,注意,主码流必须在最前面。 getchar(); getchar(); IPC_exit(); return 0; } 3、把hp_ipc文件夹放到mpp/sample/下,make就可以了(注意:把sample/Makefile.param中SENSOR_LIBS修改成你Sensor的库)。 4、把hp_ipc挂载到板子上跑起来~~

5 PC上使用vlc rtsp://192.168.1.32:554/stream_chn0.h264 打开码流是,缓冲区设置为300ms,不然延迟比较大。 这是个简单的图传,所以传1080p比较勉强,不过我测试传720p及以下的分辨率效果还是可以的,能满足调试需要。

[color=Red]Windows VLC Setting: Media ----> Open Network Stream ---> Show more details ---> Caching 1000ms(default) change to 300ms or 180ms rtsp://192.168.1.32:554/stream_chn0.h264 Delay around 0.5s [/color]

VLC for mobile: Download VLC for mobile ---> Network Stream ---> Open Network Stream rtsp://192.168.1.32:554/stream_chn0.h264

正在考虑解决的: 1 client needs to type password 2 It will support multiple clients.

参考文献: 1 http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=12458&extra=page%3D1 [hi3516] 分享3516a/d+imx290 2to1L WDR驱动+2016.9.23优化rtp图传效果,传输1080p30fp不卡

2 http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=10950&extra=page%3D1 [hi3518] 3518E Sample优化源码+2016.9.26更新rtsp图传、自动降噪接口、完美支持Hi3518EV200

由于系统还处在测试阶段,不够完善,实际项目还在研究学习中,要根据实际情况进一步优化,以达到更好的性能。

易百纳技术社区文件: ipc_imx178.tar.gz
下载
我来回答
回答7个
时间排序
认可量排序

不是吧

0个粉丝

0

问答

0

专栏

0

资料

不是吧 2016-09-29 16:23:46
认可0
楼主,请问一下我用IMX122,去哪里查询Sensor的接口方式,来修改static HI_VOID viAttrInit配置参数(接口,时序,掩码等等)

2272943826

0个粉丝

24

问答

0

专栏

8

资料

2272943826 2016-09-29 16:33:12
认可0
本帖最后由 2272943826 于 2016-11-2 15:57 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=38701&ptid=12793]不是吧 发表于 2016-9-29 16:23[/url]
楼主,请问一下我用IMX122,去哪里查询Sensor的接口方式,来修改static HI_VOID viAttrInit配置参数(接口 ...[/quote]



看imx178_vi.c 和 ipc_imx178.c

[code]
static HI_VOID viAttrInit(const IPC_VEDIO_S* pstIpcVedio,VI_ATTR_S **pstViAttr)

{

        static combo_dev_attr_t MIPI_CMOS3V3_ATTR =

        {

            /* input mode */

            

                .input_mode = INPUT_MODE_MIPI,

                        {

                                .mipi_attr =

                                {

                                        RAW_DATA_12BIT,

                                        {0, 1, 2, 3, -1, -1, -1, -1}

                                }

                        }

            

        };

        static ISP_PUB_ATTR_S ISP_PUB_ATTR =

        {

                .stWndRect = {0, 0, 1920, 1080},

                .f32FrameRate = 30,

                .enBayer = BAYER_GBRG,

        };



        /* the attributes of a VI device */

        static VI_DEV_ATTR_S VI_DEV_ATTR =

        {

            .enIntfMode = VI_MODE_LVDS,        /* input mode */

            .enWorkMode = VI_WORK_MODE_1Multiplex,        /*1-, 2-, or 4-channel multiplexed work mode */

            .au32CompMask = {0xFFC00000,    0x0},        /* r_mask    g_mask    b_mask*/

            .enScanMode = VI_SCAN_PROGRESSIVE,                /* Input scanning mode (progressive or interlaced) */

            .s32AdChnId = {-1, -1, -1, -1},                        /* AD channel ID. Typically, the default value -1 is recommended */

            

            /* The below members must be configured in BT.601 mode or DC mode and are invalid in other modes */

            .enDataSeq = VI_INPUT_DATA_YUYV,                /* Input data sequence (only the YUV format is supported) */

            .stSynCfg =

            {

                        VI_VSYNC_PULSE,                 /*Vsync*/

                        VI_VSYNC_NEG_LOW,                 /*VsyncNeg*/

                        VI_HSYNC_VALID_SINGNAL,                        /*Hsync*/

                        VI_HSYNC_NEG_HIGH,                /*HsyncNeg*/

                        VI_VSYNC_VALID_SINGAL,        /*VsyncValid*/

                        VI_VSYNC_VALID_NEG_HIGH,/*VsyncValidNeg*/

                        /*The below TimingBlank only for BT.601*/

                    /*hsync_hfb    hsync_act    hsync_hhb*/

                    {0,            1920,        0,

                    /*vsync0_vhb vsync0_act vsync0_hhb*/

                     0,            1080,        0,

                    /*vsync1_vhb vsync1_act vsync1_hhb*/

                     0,            0,            0}

                },

            .enDataPath = VI_PATH_ISP,                        /* ISP enable or bypass */

            .enInputDataType = VI_DATA_TYPE_RGB,/* RGB: CSC-709 or CSC-601, PT YUV444 disable; YUV: default yuv CSC coef PT YUV444 enable. */

            .bDataRev = HI_FALSE,                                /* Data Reverse */

            .stDevRect = {0, 30, 1920, 1080}                /* Dev capture rect */

        };



        static VI_DEV_ATTR_EX_S VI_DEV_ATTR_EX =

        {

            .enInputMode = VI_INPUT_MODE_LVDS,        /* Interface mode */

            .enWorkMode = VI_WORK_MODE_1Multiplex,        /*1-, 2-, or 4-channel multiplexed work mode */

                .enCombineMode = VI_COMBINE_COMPOSITE,        /* Y/C composite or separation mode */

                .enCompMode = VI_COMP_MODE_SINGLE,                 /* Component mode (single-component or dual-component) */

                .enClkEdge = VI_CLK_EDGE_SINGLE_DOWN,        /* Clock edge mode (sampling on the rising or falling edge) */



            .au32CompMask = {0xFFC00000,    0x0},        /* r_mask    g_mask    b_mask*/

            .enScanMode = VI_SCAN_PROGRESSIVE,                /* Input scanning mode (progressive or interlaced) */

            .s32AdChnId = {-1, -1, -1, -1},                        /* AD channel ID. Typically, the default value -1 is recommended */

            

            /* The below members must be configured in BT.601 mode or DC mode and are invalid in other modes */

            .enDataSeq = VI_INPUT_DATA_YUYV,                /* Input data sequence (only the YUV format is supported) */

            .stSynCfg =

            {

                        VI_VSYNC_PULSE,                 /*Vsync*/

                        VI_VSYNC_NEG_LOW,                 /*VsyncNeg*/

                        VI_HSYNC_VALID_SINGNAL,                        /*Hsync*/

                        VI_HSYNC_NEG_HIGH,                /*HsyncNeg*/

                        VI_VSYNC_VALID_SINGAL,        /*VsyncValid*/

                        VI_VSYNC_VALID_NEG_HIGH,/*VsyncValidNeg*/

                        /*The below TimingBlank only for BT.601*/

                    /*hsync_hfb    hsync_act    hsync_hhb*/

                    {0,            1920,        0,

                    /*vsync0_vhb vsync0_act vsync0_hhb*/

                     0,            1080,        0,

                    /*vsync1_vhb vsync1_act vsync1_hhb*/

                     0,            0,            0}

                },

                .stBT656SynCfg = {BT656_FIXCODE_1,BT656_FIELD_POLAR_STD},      /* Sync timing. This member must be configured in BT.656 mode */

            .enDataPath = VI_PATH_ISP,                        /* ISP enable or bypass */

            .enInputDataType = VI_DATA_TYPE_RGB,/* RGB: CSC-709 or CSC-601, PT YUV444 disable; YUV: default yuv CSC coef PT YUV444 enable. */

            .bDataRev = HI_FALSE,                                /* Data Reverse */

            .stDevRect = {0, 30, 1920, 1080}                /* Dev capture rect */

        };

       

        /* the attributes of a VI channel */

        static VI_CHN_ATTR_S VI_CHN_ATTR =

        {

                .stCapRect = {0, 0, 1920, 1080},

                .stDestSize        = {1920, 1080},

                .enCapSel = VI_CAPSEL_BOTH,

                .enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420,

                .enCompressMode = COMPRESS_MODE_NONE,

                .bMirror = HI_FALSE,

                .bFlip = HI_FALSE,

                .s32SrcFrameRate = -1,

                .s32DstFrameRate = -1

        };



        static VI_ATTR_S VI_ATTR =

        {

                .IspDev = 0,

                .ViDev = 0,

                .u32ChnNum = 1,

                .enWDRMode = WDR_MODE_NONE,

                //.pstcomboDevAttr = &LVDS_4lane_SENSOR_IMX178_10BIT_WDR_ATTR,

                .pstcomboDevAttr = &LVDS_4lane_SENSOR_IMX178_12BIT_NORMAL_ATTR,        // test it

                .pstIspPubAttr = &ISP_PUB_ATTR,

                .pstViDevAttr = &VI_DEV_ATTR,

                .pstViDevAttrEx = &VI_DEV_ATTR_EX,

                .pstChnAttr = &VI_CHN_ATTR

        };

        /*sync isp pub attr*/

       

        VI_ATTR.pstIspPubAttr->stWndRect.u32Width = pstIpcVedio->astStreamFmt[0].stSize.u32Width;

        VI_ATTR.pstIspPubAttr->stWndRect.u32Height = pstIpcVedio->astStreamFmt[0].stSize.u32Height;

        VI_ATTR.pstIspPubAttr->f32FrameRate = pstIpcVedio->astStreamFmt[0].f32FrameRate;

        /*sync vi dev attr*/

        VI_ATTR.pstViDevAttr->stDevRect.u32Width = pstIpcVedio->astStreamFmt[0].stSize.u32Width;

        VI_ATTR.pstViDevAttr->stDevRect.u32Height = pstIpcVedio->astStreamFmt[0].stSize.u32Height;



        //VI_ATTR.pstViDevAttrEx->stDevRect.u32Width = pstIpcVedio->astStreamFmt[0].stSize.u32Width;

        //VI_ATTR.pstViDevAttrEx->stDevRect.u32Height = pstIpcVedio->astStreamFmt[0].stSize.u32Height;

        /*sync vi chn attr*/

        VI_ATTR.pstChnAttr->stCapRect.s32X = (1920-pstIpcVedio->astStreamFmt[0].stSize.u32Width)/2;

        VI_ATTR.pstChnAttr->stCapRect.s32Y = (1080-pstIpcVedio->astStreamFmt[0].stSize.u32Height)/2;

        VI_ATTR.pstChnAttr->stCapRect.u32Width = pstIpcVedio->astStreamFmt[0].stSize.u32Width;

        VI_ATTR.pstChnAttr->stCapRect.u32Height = pstIpcVedio->astStreamFmt[0].stSize.u32Height;

        VI_ATTR.pstChnAttr->stDestSize.u32Width = pstIpcVedio->astStreamFmt[0].stSize.u32Width;

        VI_ATTR.pstChnAttr->stDestSize.u32Height = pstIpcVedio->astStreamFmt[0].stSize.u32Height;

        VI_ATTR.pstChnAttr->enPixFormat = pstIpcVedio->e_pixFmt;

        /*sync wdr mode*/

        VI_ATTR.enWDRMode = pstIpcVedio->e_wdrMode;

       

        *pstViAttr = &VI_ATTR;

}[/code]

396998850

0个粉丝

1

问答

0

专栏

0

资料

396998850 2017-02-21 15:13:25
认可0
楼主,你好,如果是多通道怎么实现?我把你主函数里的改成IPC_Init(2,stFmt_a);用VLC抓取到的视频流是错误的。

hi_isp

1个粉丝

8

问答

0

专栏

0

资料

hi_isp 2017-02-21 19:05:53
认可0
你好,你的3516A+imx290能达到60fps不?linear和wdr 2in1的模式下都能达到吗?谢谢!

2272943826

0个粉丝

24

问答

0

专栏

8

资料

2272943826 2017-04-21 13:50:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=45399&ptid=12793]hi_isp 发表于 2017-2-21 19:05[/url]
你好,你的3516A+imx290能达到60fps不?linear和wdr 2in1的模式下都能达到吗?谢谢![/quote]

打不到60fps
密码忘记啦

SA12009903

0个粉丝

12

问答

0

专栏

2

资料

SA12009903 2017-06-29 14:30:48
认可0
听说rtsp还需要服务器的吗,这个怎么弄?

Karthus

0个粉丝

12

问答

0

专栏

0

资料

Karthus 2016-09-29 18:52:55
认可0
不错!!!
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区