当前位置: 首页 > news >正文

织梦 音乐网站做网站怎么注册营业执照

织梦 音乐网站,做网站怎么注册营业执照,wordpress自定义类型的分类名称,wordpress 会员制 主题目录 一.RV1126多线程处理输出OSD字符叠加图层的流程 1.1. VI模块的初始化 1.2. 初始化VENC模块#xff1a; 1.3. 初始化RGN模块#xff1a; 1.4. 绑定VI模块和VENC模块#xff0c;伪代码如下 1.5. 创建多线程进行OSD字库的叠加#xff1a; 1.6. 获取每一帧处理过后的…目录 一.RV1126多线程处理输出OSD字符叠加图层的流程 1.1. VI模块的初始化 1.2. 初始化VENC模块 1.3. 初始化RGN模块 1.4. 绑定VI模块和VENC模块伪代码如下 1.5. 创建多线程进行OSD字库的叠加 1.6. 获取每一帧处理过后的VENC数据 二.程序代码 三.运行结果 一.RV1126多线程处理输出OSD字符叠加图层的流程 用RV1126多线程输出OSD叠加需要经过上面几个重要步骤分别是VI模块初始化、VENC模块初始化、RGN模块初始化、多线程进行OSD字库的叠加(里面主要是进行字库的渲染和RV1126的OSD模块叠加)、多线程获取每一帧OSD处理过后的编码数据 1.1. VI模块的初始化 VI模块的初始化实际上就是对VI_CHN_ATTR_S的参数进行设置、然后调用RK_MPI_VI_SetChnAttr设置VI模块并使能RK_MPI_VI_EnableChn伪代码如下 VI_CHN_ATTR_S  vi_chn_attr; 。。。。。。。。。。。。。。。(这里是设置VI的属性) ret RK_MPI_VI_SetChnAttr(CAMERA_ID, 0, vi_chn_attr); ret | RK_MPI_VI_EnableChn(CAMERA_ID, 0); 1.2. 初始化VENC模块 VENC模块的初始化实际上就是对VENC_CHN_ATTR_S的参数进行设置、然后调用RK_MPI_VENC_CreateChn创建编码器伪代码如下 VENC_CHN_ATTR_S venc_chn_attr; venc_chn_attr.stVencAttr.enType RK_CODEC_TYPE_H264; 。。。。。。。。。。。。。。。。(这里是设置VENC的属性) ret RK_MPI_VENC_CreateChn(0, venc_chn_attr); 1.3. 初始化RGN模块 RGN是RV1126图层区域功能管理的功能比方说OSD图层、Bitmap位图都属于RGN模块。所以开发者要用到OSD功能都需要初始化RGN具体的API描述如下 RK_S32_RK_MPI_VENC_RGN_Init(VENC_CHN_VeChn, VENC_COLOR_TBL_S *stColorTbl); 第一个传参数VENC编码通道号 第二个传参数VENC_COLOR_TBL_S结构体指针默认是NULL RK_MPI_VENC_RGN_Init(0, NULL); 1.4. 绑定VI模块和VENC模块伪代码如下 MPP_CHN_S vi_chn_s; MPP_CHN_S venc_chn_s; ret RK_MPI_SYS_Bind(vi_chn_s, venc_chn_s); 1.5. 创建多线程进行OSD字库的叠加 创建OSD叠加线程主要是对VENC的数据进行字库的创建和OSD的数据叠加 ...................................................................... char *pstr 2019-11-21 15:40:29; if(TTF_Init() 0) { fprintf(stderr, Couldnt initialize TTF: %s\n, SDL_GetError()); } ttf_font TTF_OpenFont(./fzlth.ttf, 48); if(ttf_font NULL) { fprintf(stderr, Couldnt load %d pt font from %s: %s\n, 48, ptsize, SDL_GetError()); } text TTF_RenderText_Solid(ttf_font, pstr, sdl_color); ............................................................ SDL_PixelFormat *pixel_format (SDL_PixelFormat *)malloc(sizeof(SDL_PixelFormat)); ........................ temp SDL_ConvertSurface(text, pixel_format, 0); static int get_align16_value(int input_value, int align) { int handle_value 0; if (align (input_value % align)) handle_value (input_value/ align 1) * align; return handle_value; } { ...................... bitmap_width get_align16_value(temp-w, 16); bitmap_height get_align16_value(temp-h, 16); if (bitmap_width 64) bitmap_width 64; if (bitmap_height 64) bitmap_height 64; BITMAP_S BitMap; BitMap.enPixelFormat PIXEL_FORMAT_ARGB_8888; BitMap.u32Width bitmap_width; BitMap.u32Height bitmap_height; BitMap.pData malloc(wxh_size * fmt-BytesPerPixel); if (!BitMap.pData) { printf(ERROR: no mem left for argb8888(%d)!\n, wxh_size * fmt-BytesPerPixel); break; } memcpy(BitMap.pData, temp-pixels, (temp-w) * (temp-h) * fmt-BytesPerPixel); OSD_REGION_INFO_S RngInfo; RngInfo.enRegionId REGION_ID_7; RngInfo.u32PosX 0; RngInfo.u32PosY 0; RngInfo.u32Width bitmap_width; RngInfo.u32Height bitmap_height; RngInfo.u8Enable 1; RngInfo.u8Inverse 0; ret RK_MPI_VENC_RGN_SetBitMap(0, RngInfo, BitMap); ........... } 上面是OSD叠加的代码主要是通过RV1126的RNG模块对VENC进行OSD进行字库叠加。其中划黑色粗体是这个程序的核心它需要把每个width和height进行16位对齐因为OSD需要处理16位对齐的数据(所谓十六位对齐可以理解为width和height能够被16位整除)。这里面用到16位对齐的方法是get_align16_valueinput_value指的是输入的数值align是要对齐的数值。 1.6. 获取每一帧处理过后的VENC数据 开启一个线程去采集每一帧VENC模块的数据使用的API是RK_MPI_SYS_GetMediaBuffer 模块ID是RK_ID_VENC通道号ID是VENC创建的ID号。这个API的具体作用已我们直接上伪代码 while(1) { ............................. mb RK_MPI_SYS_GetMediaBuffer(RK_ID_VENC, s32_chn_id, -1); fwrite(RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb), 1, h264_file); ............................ } 二.程序代码 #include assert.h #include fcntl.h #include getopt.h #include pthread.h #include signal.h #include stdbool.h #include stdio.h #include stdlib.h #include time.h #include unistd.h// #include common/sample_common.h #include rkmedia_api.h#include stdio.h #include SDL.h #include SDL_ttf.h #include time.h#define CAMERA_PATH rkispp_scale0 #define CAMERA_ID 0 #define CAMERA_CHN 0 #define VENC_CHN 0//对某个数值进行对齐 static int get_align16_value(int input_value, int align) {int handle_value 0;if (align (input_value % align))handle_value (input_value/ align 1) * align;return handle_value; }void * bitmap_osd_handle_thread(void * args) {pthread_detach(pthread_self());int ret ;TTF_Font * ttf_font;char *pstr 2019-11-21 15:40:29;SDL_Surface * text_surface;SDL_Surface * convert_text_surface;SDL_PixelFormat * pixel_format;//TTF模块的初始化ret TTF_Init();if(ret 0){printf(TTF_Init Failed...\n);}//打开TTF的字库ttf_font TTF_OpenFont(./fzlth.ttf, 48);if(ttf_font NULL){printf(TTF_OpenFont Failed...\n);}//SDL_COLOR黑色,RGB(0,0,0)SDL_Color sdl_color;sdl_color.r 0;sdl_color.g 0;sdl_color.b 0;text_surface TTF_RenderText_Solid(ttf_font, pstr, sdl_color); 渲染文字//ARGB_8888pixel_format (SDL_PixelFormat *)malloc(sizeof(SDL_PixelFormat));pixel_format-BitsPerPixel 32; //每个像素所占的比特位数 pixel_format-BytesPerPixel 4; //每个像素所占的字节数 pixel_format-Amask 0XFF000000;//ARGB的A掩码A位0xffpixel_format-Rmask 0X00FF0000;//ARGB的R掩码R位0xffpixel_format-Gmask 0X0000FF00;//ARGB的G掩码G位0xffpixel_format-Bmask 0X000000FF;//ARGB的B掩码B位0xffconvert_text_surface SDL_ConvertSurface(text_surface, pixel_format, 0);if(convert_text_surface NULL){printf(convert_text_surface failed...\n);}BITMAP_S bitmap;//Bitmap位图结构体bitmap.u32Width get_align16_value(convert_text_surface-w, 16);//Bitmap的宽度bitmap.u32Height get_align16_value(convert_text_surface-h, 16);//Bitmap的高度bitmap.enPixelFormat PIXEL_FORMAT_ARGB_8888;像素格式ARGB8888bitmap.pData malloc((bitmap.u32Width) * (bitmap.u32Height) * pixel_format-BytesPerPixel); bitmap的data的分配大小memcpy(bitmap.pData, convert_text_surface-pixels, (convert_text_surface-w) * (convert_text_surface-h) *pixel_format-BytesPerPixel);bitmap的data赋值OSD_REGION_INFO_S rgn_info; //OSD_RGN_INFO结构体rgn_info.enRegionId REGION_ID_0; //rgn的区域IDrgn_info.u32Width bitmap.u32Width ; //osd的长度rgn_info.u32Height bitmap.u32Height ; //osd的高度rgn_info.u32PosX 128; //Osd的X轴方向rgn_info.u32PosY 128; //Osd的Y轴方向rgn_info.u8Enable 1; 使能OSD模块1是使能0为禁止。rgn_info.u8Inverse 0; //禁止翻转ret RK_MPI_VENC_RGN_SetBitMap(VENC_CHN, rgn_info, bitmap); //设置OSD位图if(ret){printf(RK_MPI_VENC_RGN_SetBitMap failed...\n);}else{printf(RK_MPI_VENC_RGN_SetBitMap Success...\n);}return NULL; }void * get_h264_data_thread(void * args) {pthread_detach(pthread_self());FILE *h264_file fopen(test_osd_venc.h264, w);MEDIA_BUFFER mb ;while (1){mb RK_MPI_SYS_GetMediaBuffer(RK_ID_VENC, VENC_CHN, -1);if(!mb){printf(RK_MPI_SYS_GetMediaBuffer failed...\n);break;}printf(Get osd buffer success.....\n);fwrite(RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb), 1, h264_file);RK_MPI_MB_ReleaseBuffer(mb);}return NULL; }int main() {int ret;VI_CHN_ATTR_S vi_chn_attr;vi_chn_attr.pcVideoNode CAMERA_PATH; //设置视频设备节点路径vi_chn_attr.u32Width 1920; //设置分辨率的宽度vi_chn_attr.u32Height 1080; //设置分辨率的高度vi_chn_attr.enPixFmt IMAGE_TYPE_NV12; //设置图像类型vi_chn_attr.enBufType VI_CHN_BUF_TYPE_MMAP; //设置VI获取类型vi_chn_attr.u32BufCnt 3; //设置缓冲数量vi_chn_attr.enWorkMode VI_WORK_MODE_NORMAL; //设置VI工作类型ret RK_MPI_VI_SetChnAttr(CAMERA_ID, CAMERA_CHN, vi_chn_attr);if (ret){printf(Vi Set Attr Failed.....\n);return 0;}else{printf(Vi Set Attr Success.....\n);}ret RK_MPI_VI_EnableChn(CAMERA_ID, CAMERA_CHN); // if (ret){printf(Vi Enable Attr Failed.....\n);return 0;}else{printf(Vi Enable Attr Success.....\n);}VENC_CHN_ATTR_S venc_chn_attr;memset(venc_chn_attr, 0, sizeof(venc_chn_attr));venc_chn_attr.stVencAttr.enType RK_CODEC_TYPE_H264;//设置编码器类型venc_chn_attr.stVencAttr.imageType IMAGE_TYPE_NV12;//设置编码图像类型venc_chn_attr.stVencAttr.u32PicWidth 1920;//设置编码分辨率宽度venc_chn_attr.stVencAttr.u32PicHeight 1080;//设置编码分辨率高度venc_chn_attr.stVencAttr.u32VirWidth 1920;//设置编码分辨率虚宽venc_chn_attr.stVencAttr.u32VirHeight 1080;//设置编码分辨率虚高venc_chn_attr.stVencAttr.u32Profile 77;//设置编码等级venc_chn_attr.stRcAttr.enRcMode VENC_RC_MODE_H264CBR;//设置H264的CBR码率控制模式venc_chn_attr.stRcAttr.stH264Cbr.u32Gop 25;venc_chn_attr.stRcAttr.stH264Cbr.u32BitRate 2000000; // 2Mbvenc_chn_attr.stRcAttr.stH264Cbr.fr32DstFrameRateDen 1;//设置源帧率分母venc_chn_attr.stRcAttr.stH264Cbr.fr32DstFrameRateNum 25;//设置源帧率分子venc_chn_attr.stRcAttr.stH264Cbr.u32SrcFrameRateDen 1;//设置目标帧率分母venc_chn_attr.stRcAttr.stH264Cbr.u32SrcFrameRateNum 25;//设置目标帧率分子ret RK_MPI_VENC_CreateChn(0, venc_chn_attr); //VENC模块的初始化if (ret){printf(ERROR: create VENC[0] error! ret%d\n, ret);return 0;}else{printf(VENC SUCCESS\n);}ret RK_MPI_VENC_RGN_Init(VENC_CHN, NULL);//RGN模块的初始化if(ret){printf(Create VENC_RGN Failed .....\n);return 0;}else{printf(Create VENC_RGN Success .....\n);}MPP_CHN_S vi_chn_s;MPP_CHN_S venc_chn_s;vi_chn_s.enModId RK_ID_VI;vi_chn_s.s32ChnId 0;venc_chn_s.enModId RK_ID_VENC;venc_chn_s.s32ChnId 0;ret RK_MPI_SYS_Bind(vi_chn_s, venc_chn_s); VI模块节点和VENC节点绑定if(ret){printf(RK_MPI_SYS_Bind Failed .....\n);}else{printf(RK_MPI_SYS_Bind Success .....\n);}pthread_t bitmap_pid, venc_pid;pthread_create(bitmap_pid, NULL, bitmap_osd_handle_thread, NULL); //创建OSD叠加线程pthread_create(venc_pid, NULL, get_h264_data_thread, NULL); //获取H264码流线程while (1){sleep(2);}RK_MPI_SYS_UnBind(vi_chn_s, venc_chn_s);RK_MPI_VENC_DestroyChn(VENC_CHN);RK_MPI_VI_DisableChn(CAMERA_ID, CAMERA_CHN);return 0; } 三.运行结果 注意假设出现水印显示不完整这种情况下需要调整X轴和Y轴的坐标轴让其水印显示完整。
http://www.hkea.cn/news/14381368/

相关文章:

  • 西安道桥建设有限公司网站网站开发亿玛酷给力5
  • 网站去掉index.html团队建设
  • 网站运行费用一般多少微信做单网站
  • 建设银行网站特色跨境电商是不是坑
  • 织梦网站主页代码在后台怎么改用织梦做的网站好不好
  • 做pcr查基因序列的网站discuz做电影网站
  • 新网站建设服务公司网站做违法的事情投诉
  • wordpress weixin宁波seo关键词如何优化
  • 网上做公益的网站电子商务公司是做什么的
  • 网站建设最基础的是什么意思网站建设总结与心得体会
  • 网站建设内部因素自己开公司 自己做网站
  • 在哪一个网站做社保申报wordpress茶叶模板
  • 郑州网站建设找智巢自定义wordpress页面模板
  • 学生个人网站建设方案书框架栏目怎么给网站做快照
  • 企业网站建设cms系统做网站如何报价
  • 房子网站有哪些wordpress 主题 百科
  • 网站建设用哪个好wordpress 糗百
  • 学校网站建设开发商厦门集团网站设计公司
  • 唐山房产网站建设建筑职业培训中心
  • 价钱网站建设可以直接进入网站的正能量连接
  • 银川做网站最好的公司有哪些小程序直播
  • 电子商务网站开发实践费县住房和城乡建设局网站
  • 深圳网站设计九曲网站测速工具
  • 网站开发工期安排表wordpress pc手机端两套模板
  • dedecms搭建购物网站铜梁城乡建设网站
  • 做网站的困难wordpress广告赚钱
  • 如何设计和建立一个公司的网站手机wap网站是什么
  • 有交做拼多多网站的吗优化二十条
  • 苏州调查公司怎么收费搜索引擎营销优化诊断训练
  • 临沂网站推广app怎么制作多少钱