Chinaunix首页 | 论坛 | 博客
  • 博客访问: 492975
  • 博文数量: 154
  • 博客积分: 746
  • 博客等级: 入伍新兵
  • 技术积分: 1129
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-20 09:20
个人简介

此生既入苦寒山,何妨再攀险峰!

文章分类

全部博文(154)

文章存档

2017年(1)

2016年(2)

2015年(25)

2014年(24)

2013年(8)

2012年(15)

2011年(79)

分类: LINUX

2015-01-29 11:06:11

问题描述
aimer39平台camera摄像头端,启用两路视频码流采集,正常发送到控制台。但是需要报警时,还需要采集现场,编码第三路视频码流,发送到控制台。

解决方案:

正常情况下的两路视频码流发送,aimer39平台框架已经实现。报警情况下的视频码流编码,需要独立调用视频库接口实现。
特别需要注意,在三路码流并发执行情况下,第三路码流编码时 需要复位视频库。
第三路视频编码简单流程:
1.  open_encode(int width, int height, int real_width, int real_height);
2. frame_encode(T_pVOID hvs1, void *pinbuf, void **poutbuf, unsigned long *size);

简单参考实现:
static T_pVOID open_encode(int width, int height, int real_width, int real_height)
{
         T_VIDEOLIB_ENC_OPEN_INPUT open_input;
         T_U32 temp;
 
          outbuf = akuio_alloc_pmem(ENCMEM);
          if (AK_NULL == outbuf)
          {
                    return AK_NULL;
          }
 
           temp = akuio_vaddr2paddr(outbuf) & 7;
            //编码buffer 起始地址必须8字节对齐
            encbuf = ((T_U8 *)outbuf) + ((8-temp)&7);

 
            open_input.encFlag = VIDEO_DRV_MJPEG;
               open_input.encMJPEGPar.frameType = ENC_YUV420_PLANAR;//JPEGENC_YUV420_PLANAR;
                open_input.encMJPEGPar.format = ENC_THUMB_JPEG;
               open_input.encMJPEGPar.thumbWidth = 0;
                     open_input.encMJPEGPar.thumbHeight = 0;
                  open_input.encMJPEGPar.thumbData = NULL;
                 open_input.encMJPEGPar.thumbDataLen = 0;
                    open_input.encMJPEGPar.qLevel = 7;
                   open_input.encMJPEGPar.width = 640;
                    open_input.encMJPEGPar.height = 480;
                       open_input.encMJPEGPar.lumWidthSrc = 640;
                          open_input.encMJPEGPar.lumHeightSrc =480;
                        open_input.encMJPEGPar.horOffsetSrc = 0;
                                open_input.encMJPEGPar.verOffsetSrc =0;

                       return  VideoStream_Enc_Open(&open_input);
}

int photograph( void *pbuf, int size)
{

                 unsigned long outsize;
                  int ret;

                   VideoStream_Enc_Reset();

                  ret = frame_encode(h_eid, pbuf, &buf, &outsize);

                    VideoStream_Enc_Reset();
 
                     return 0;
}
 

阅读(1365) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~