【01】代码

multicoreware / x265_git / wiki / Home — Bitbucket

【02】编译

#需要numa相关包

sudo apt-get install libnuma-dev

#需要cmake 和 cmake

sudo apt-get install cmake

sudo apt-get install cmake-curses-gui

进入编译脚本目录:

#生成makefile,脚本在 build/linux 下:

./make-MakeFiles.bash

输入完后按 c 执行 configura。

然后执行 make  即可:

生成的可执行文件需要和动态库同目录才能运行,查看版本:

这一步生成的 makefile 会根据 source/CMakeLists.txt 指定启动入口,修改启动类 默认为  x265.cpp,为方便调试修改为 test.cpp ,修改 CMakeLists.txt 如下:

全局搜索 x265.cpp 修改为 test.cpp 即可。然后重新 make 生成 h265 可执行文件,运行 target 就能运行 test.cpp 测试类。

修改源码后需要重新编译进行debug,进入 build/linux 下执行 make 后生成新的  x265 可执行文件。

test.cpp 调用如下:


/** x265 编码接口调用示例* */int main(int argc, char** argv){const char *src_fname = "/home/tangyufan/workspace/clion-workspace/x265_git/debug/352x288frames300.yuv";const char *dst_fname = "/home/tangyufan/workspace/clion-workspace/x265_git/debug/352x288frames300.h265";FILE *fp_src = NULL;FILE *fp_dst = NULL;// yuv 输入filefp_src = fopen(src_fname,"rb");// h265 输出filefp_dst = fopen(dst_fname,"wb");// 参数结构体x265_param* pParam = x265_param_alloc();// 设置默认参数x265_param_default(pParam);pParam->bRepeatHeaders = 1; // 是否每个关键帧都输出V PS, SPS and PPS headerspParam->internalCsp = X265_CSP_I420; //yuv420pParam->sourceWidth = 352;  //分辨率pParam->sourceHeight = 288; //分辨率pParam->fpsNum = 25;   //fps 分子pParam->fpsDenom = 1;   //fps 分母pParam->bframes = 0;   //禁用b帧编码pParam->frameNumThreads = 1;    //每次编码一帧pParam->logLevel = 2;pParam->numaPools = "1";  //工作线程池设置// 所有参数std::cout << "pParam:" << pParam << std::endl;// 编码器x265_encoder* pHandle = x265_encoder_open(pParam);if(pHandle==NULL){printf("x265_encoder_open err\n");return 0;}// 图片结构体初始化 用来保存每一帧输入的yuv分量x265_picture *pPic_in = x265_picture_alloc();x265_picture_init(pParam,pPic_in);// 分辨率 352*288=101376 个像素点int resolving = pParam->sourceWidth * pParam->sourceHeight;// yuv每一帧图像占用的字节数是1.5倍分辨率char *buff = NULL;buff = (char *)malloc(resolving * 3/2);pPic_in->planes[0] = buff;pPic_in->planes[1] = buff+resolving;pPic_in->planes[2] = buff+resolving*5/4;pPic_in->stride[0] = pParam->sourceWidth;pPic_in->stride[1] = pParam->sourceWidth/2;pPic_in->stride[2] = pParam->sourceWidth/2;// 每一帧会编码成多个 pNals、个数就是 iNalx265_nal *pNals=NULL;uint32_t iNal=0;int ret;//循环编码n帧数for(int n=1;n<=2;n++){/** YUV格式分为两大类:planar(平面)和packed(打包)。这里是planar平面模式提取分量* planar格式,先连续存储所有像素点的Y分量,紧接着存储所有像素点的U,随后存储所有像素点的V。* packed格式,每个像素点的Y、U、V分量是连续存储的* */// YUV中,每一帧中,每1个像素点一个Yfread(pPic_in->planes[0],1,resolving,fp_src);// YUV中,每一帧中,每4个像素点通用一个Ufread(pPic_in->planes[1],1,resolving/4,fp_src);// YUV中,每一帧中,每4个像素点通用一个Vfread(pPic_in->planes[2],1,resolving/4,fp_src);// 将图片输入编码器 pPic_instd::cout << "编码 start1.." << std::endl;ret = x265_encoder_encode(pHandle,&pNals,&iNal,pPic_in,NULL);std::cout << "编码 end1.." << std::endl;// 一帧被编码成 iNal 个 pNals 如果有可以取出来的 nal 数据则取出来写入文件if(iNal>0){for(int j=0;j<iNal;j++){fwrite(pNals[j].payload,1,pNals[j].sizeBytes,fp_dst);//                printf("Flush 1 frame.\n");}}}// 输出编码器中剩余的 nal 数据// 该模块使用的函数和编码模块是一样的。唯一的不同在于不再输入视频像素数据。它的作用是输出编码器中剩余的码流数据。while(1){// 编码结果写入 pNalsstd::cout << "编码 start2.." << std::endl;ret = x265_encoder_encode(pHandle,&pNals,&iNal,NULL,NULL);std::cout << "编码 end2.." << std::endl;if(ret==0){break;}// pNals 写入文件for(int j=0;j<iNal;j++){fwrite(pNals[j].payload,1,pNals[j].sizeBytes,fp_dst);//            printf("Flush 1 frame.\n");}}// 打印 编码信息x265_encoder_close(pHandle);}

在 clion 中 load  source/CMakeLists.txt 文件后,选择工具链为 wsl 可以直接点击箭头运行。

x265 windwos使用wsl调试相关推荐

  1. x265笔记_1_下载调试

    文章目录 下载x265 配置环境 图文步骤 报错`CMake Error :Visual Studio 15 2017 -could not find any instance of Visual S ...

  2. Win10 Bash/WSL调试Linux环境下的.NET Core应用程序

    一.简介 使用过Mac OS的程序员都知道,在Mac Book Pro上写程序是一件比较爽的事儿,作为dotneter,我们都比较羡慕Mac系统的环境,比如命令行,当然设备也是挺漂亮的. 在新的Win ...

  3. Win10 Bash\/WSL调试Linux环境下的.NET Core应用程序

    一.简介 使用过Mac OS的程序员都知道,在Mac Book Pro上写程序是一件比较爽的事儿,作为dotneter,我们都比较羡慕Mac系统的环境,比如命令行,当然设备也是挺漂亮的. 在新的Win ...

  4. 835 由于安全层无法对远程计算机进行身份验证_vscode 插件Remote-ssh远程wsl调试python

    解决远程ssh端口非22的问题,见文末 参考文献: Developing on Remote Machines using SSH and Visual Studio Code​code.visual ...

  5. wsl调试linux内核,微软更新Linux子系统,编译WSL 2内核只需3步

    点击▲存眷 "CU手艺社区"   给公家号标星置顶 [本文来自:www.pp00.com] 更多出色 第一时间直达 [本文来自:www.pp00.com] 晓查 发自 凹非寺转自量 ...

  6. MIT6.824环境搭建:wls+vs code

    MIT6.824环境搭建:wls+vs code 背景 尝试学习MIT 6.824分布式系统,他们的实验使用的是go语言,并且不支持window.打算使用wls+vs code搭建开发环境.这里做记录 ...

  7. WSL2 上不了外网。解决!

    我主要是想在vs里的wsl调试我的.netcore程序,在wsl2里装了ubuntu,弄了我好久都上不了外网,apt update没法用,.net 环境没法安装,气死我了. 试过网上找到的大部分方法, ...

  8. win10下使用pycharm调试wsl的代码

    安装wsl 网上一大把,自己搜.我自己装的ubuntu 18 将代码放在win10的目录中 如 d:\teether wsl安装python3-pip wsl的Ubuntu下已经装了python3 p ...

  9. 用Visual Studio 2019连接 WSL来编译调试C/C++项目

    因为有作业要在Linux环境下写,用虚拟机直接卡成PPT,VS code又不会调试,就搞一下VS 2019吧. 环境 windows 10 + WSL(Ubuntu 18.04.4) + Visual ...

最新文章

  1. linux shell 求绝对值
  2. 2021 年前端趋势预测
  3. [转]Microsoft SQL Server 自定义函数整理大全
  4. HTTP -- 目录
  5. php代理请求失败,http请求失败有哪些原因
  6. Lync Server 2013 标准版部署(十)边缘服务器部署[三]
  7. java 验证码的制作
  8. vim编辑器常用插件安装及配色方案
  9. python int转换为byte_Python int与byte类型相互转化
  10. java403forbidden_Spring Cloud出现Options Forbidden 403问题解决方法
  11. 腾讯与阿里巴巴投资可编程芯片公司Barefoot Networks
  12. 微服务通用的“用户角色权限”平台设计
  13. Kubernetes——KubeSphere部署worldpress应用
  14. 基于医疗RFID手术用品智能柜管理应用方案
  15. SEO流量变现,看这个项目就够了!
  16. 专用VPX背板连接器
  17. 教你一个无本万利的赚钱方法_一个在股市中稳健赚钱的方法
  18. (1) Debian 项目介绍
  19. centos linux 下的jdk安装 jdk-6u26-linux-x64.bin
  20. 二氯乙烷(EDC)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 怎么从SPSS的分析结果中得出回归方程?
  2. android app内部打开word pdf .doc类型文件的两种方式
  3. 【华为OD机试真题 python】补种未成活胡杨 【2022 Q4 | 100分】
  4. slim android7 nexus7,新Nexus 7详细拆解:拆装不难,外壳脆弱
  5. Elasticsearch深度探秘搜索技术如何手动控制全文检索结果的精准度
  6. sm2262en怎么量产?sm2262en量产工具,sm2263en开卡软件,sm2263en、sm2262en使用量产工具成功开卡的方法指引
  7. Word-embeding 【paper】
  8. h5页面制作案例-高水准页面制作引领营销风潮
  9. 云服务器文件管理系统,文件服务器版文档管理系统
  10. 【C语言】BC62统计数据正负数个数(DAY 4)