x265

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<x265.h>
#pragma comment(lib,"libx265.lib")
int main(){
FILE*f_src=NULL;
FILE*f_des=NULL;
const char*filename_src="I:\\Video\\1080p.yuv";
const char*filename_des="I:\\Video\\1080p.265";
 int width=352;
int height=288;
int fps=25;
f_src=fopen(filename_src,"rb");
f_des=fopen(filename_des,"wb");
if(f_src==NULL||f_des==NULL){
return 0;
}
int buffsize=width*height*3/2;
char*buff_src=(char*)malloc(buffsize);
//配置x265参数
 x265_param* param=x265_param_alloc();
x265_param_default(param);
param->bRepeatHeaders=1;//每个关键帧前写sps,pps
// param->internalCsp=X265_CSP_I420;//默认I420,不写没事
 param->sourceWidth=width;
param->sourceHeight=height;
param->fpsNum=fps;
param->fpsDenom=1;
//初始化编码器
 x265_encoder* hx265=x265_encoder_open(param);
if(hx265==NULL){
printf("x265_encoder_open err\n");
return 0;
}
//设置YUV参数
 x265_picture *pic_in = x265_picture_alloc();
x265_picture_init(param,pic_in);
//YUV对应开始位置
 pic_in->planes[0]=buff_src;
pic_in->planes[1]=buff_src+width*height;
pic_in->planes[2]=buff_src+width*height*5/4;
//YUV每行数据
 pic_in->stride[0]=width;
pic_in->stride[1]=width/2;
pic_in->stride[2]=width/2;
int ret;
x265_nal*pp_nal=NULL;
uint32_t pi_nal=0;
//循环读数据并编码
 while (fread(buff_src,1,buffsize,f_src)==buffsize){
ret=x265_encoder_encode(hx265,&pp_nal,&pi_nal,pic_in,NULL);
for(int j=0;j<pi_nal;j++){
fwrite(pp_nal[j].payload,1,pp_nal[j].sizeBytes,f_des);
} 
}
//剩余写出来
 while(ret=x265_encoder_encode(hx265,&pp_nal,&pi_nal,NULL,NULL)){
for(int j=0;j<pi_nal;j++){
fwrite(pp_nal[j].payload,1,pp_nal[j].sizeBytes,f_des);
}
}
fclose(f_src);
fclose(f_des);
free(buff_src);
x265_encoder_close(hx265);
x265_picture_free(pic_in);
system("PAUSE");
return 0;
}
 
源码上传到csdn 有需要的可以下载
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ww506772362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值