/*** 最简单的基于X264的视频编码器* Simplest X264 Encoder** 雷霄骅 Lei Xiaohua* leixiaohua1020@126.com* 中国传媒大学/数字电视技术* Communication University of China / Digital TV Technology* http://blog.csdn.net/leixiaohua1020** 本程序可以YUV格式的像素数据编码为H.264码流,是最简单的* 基于libx264的视频编码器** This software encode YUV data to H.264 bitstream.* It's the simplest encoder example based on libx264.*/
#include <stdio.h>
#include <stdlib.h>#include "stdint.h"#if defined ( __cplusplus)
extern "C"
{
#include "x264.h"
};
#else
#include "x264.h"
#endifint main(int argc, char** argv)
{int ret;int y_size;int i,j;//FILE* fp_src  = fopen("../test420.yuv", "rb");FILE* fp_src  = fopen("../cuc_ieschool_640x360_yuv420p.yuv", "rb");FILE* fp_dst = fopen("cuc_ieschool.h264", "wb");//Encode 50 frame//if set 0, encode all frameint frame_num=10;int csp=X264_CSP_I420;//int width=640,height=360;int width = 960, height = 1280;int iNal   = 0;x264_nal_t* pNals = NULL;x264_t* pHandle   = NULL;x264_picture_t* pPic_in = (x264_picture_t*)malloc(sizeof(x264_picture_t));x264_picture_t* pPic_out = (x264_picture_t*)malloc(sizeof(x264_picture_t));x264_param_t* pParam = (x264_param_t*)malloc(sizeof(x264_param_t));//Checkif(fp_src==NULL||fp_dst==NULL){printf("Error open files.\n");return -1;}x264_param_default(pParam);pParam->i_width   = width; pParam->i_height  = height;//ParampParam->i_log_level  = X264_LOG_DEBUG;pParam->i_threads  = X264_SYNC_LOOKAHEAD_AUTO;pParam->i_frame_total = 0;pParam->i_keyint_max = 10;pParam->i_bframe  = 5;pParam->b_open_gop  = 0;pParam->i_bframe_pyramid = 0;pParam->rc.i_qp_constant=0;pParam->rc.i_qp_max=0;pParam->rc.i_qp_min=0;pParam->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;pParam->i_fps_den  = 1; pParam->i_fps_num  = 25;pParam->i_timebase_den = pParam->i_fps_num;pParam->i_timebase_num = pParam->i_fps_den;pParam->i_csp=csp;x264_param_apply_profile(pParam, x264_profile_names[5]);pHandle = x264_encoder_open(pParam);x264_picture_init(pPic_out);x264_picture_alloc(pPic_in, csp, pParam->i_width, pParam->i_height);//ret = x264_encoder_headers(pHandle, &pNals, &iNal);y_size = pParam->i_width * pParam->i_height;//detect frame numberif(frame_num==0){fseek(fp_src,0,SEEK_END);switch(csp){case X264_CSP_I444:frame_num=ftell(fp_src)/(y_size*3);break;case X264_CSP_I420:frame_num=ftell(fp_src)/(y_size*3/2);break;default:printf("Colorspace Not Support.\n");return -1;}fseek(fp_src,0,SEEK_SET);}//Loop to Encodefor( i=0;i<frame_num;i++){switch(csp){case X264_CSP_I444:{fread(pPic_in->img.plane[0],y_size,1,fp_src); //Yfread(pPic_in->img.plane[1],y_size,1,fp_src); //Ufread(pPic_in->img.plane[2],y_size,1,fp_src); //Vbreak;}case X264_CSP_I420:{fread(pPic_in->img.plane[0],y_size,1,fp_src);  //Yfread(pPic_in->img.plane[1],y_size/4,1,fp_src);   //Ufread(pPic_in->img.plane[2],y_size/4,1,fp_src);   //Vbreak;}default:{printf("Colorspace Not Support.\n");return -1;}}pPic_in->i_pts = i;ret = x264_encoder_encode(pHandle, &pNals, &iNal, pPic_in, pPic_out);if (ret< 0){printf("Error.\n");return -1;}printf("Succeed encode frame: %5d\n",i);for ( j = 0; j < iNal; ++j){fwrite(pNals[j].p_payload, 1, pNals[j].i_payload, fp_dst);}}i=0;//flush encoderwhile(1){ret = x264_encoder_encode(pHandle, &pNals, &iNal, NULL, pPic_out);if(ret==0){break;}printf("Flush 1 frame.\n");for (j = 0; j < iNal; ++j){fwrite(pNals[j].p_payload, 1, pNals[j].i_payload, fp_dst);}i++;}x264_picture_clean(pPic_in);x264_encoder_close(pHandle);pHandle = NULL;free(pPic_in);free(pPic_out);free(pParam);fclose(fp_src);fclose(fp_dst);return 0;
}

雷神的 h264 编码例子相关推荐

  1. 海思Hi3519A 进行4k60 h264编码帧率不足的问题

    <!---title:海思Hi3519A 进行4k60 h264编码帧率不足的问题--> <!---keywords:海思,hi3519A, 4k60, h264--> 原始引 ...

  2. Android音视频【一】H264编码基础

    人间观察 岁月催人,时间过的太快了 音视频编码解码就是指通过特定的压缩/解压技术,将某个音视频格式的数据转换为另一种音视频格式数据.目前在Android中的音视频用的最多的就是H264+aac的方式进 ...

  3. H264编码原理(无损压缩)

    无损压缩 DCT变换 经过有损压缩后的数据是分散在二维图标中的各个节点上,数据比较分散时不利于压缩,通过DCT变换,所有的分散数据都被集中在一块,左上角右下角等等. DCT可以将数据由分散变为集中,利 ...

  4. 音视频开发系列-H264编码原理

    H264简介 来自百度百科的介绍: H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式. H.264是ITU-T以H.26x系列为名称命名的 ...

  5. H264编码基本原理(一)

    H264编码基本原理(一) 一.前言 二.H264相关概念 2.1 序列 2.2 帧类型 2.3 GOP(画面组) 2.4 IDR帧(关键帧) 三.H264压缩方式 3.1 压缩方式说明 四.H264 ...

  6. H264编码系列之profile level控制

    Sequence Paramater Set(SPS)(序列参数集) (1). profile_idc: 标识当前H.264码流的profile.我们知道,H.264中定义了三种常用的档次profil ...

  7. H264 编码基本原理

    1 H264 简介 H.264,同时也是 MPEG-4 第十部分,是由 ITU-T 视频编码专家组(VCEG)和 ISO/IEC 动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint V ...

  8. 超越苹果索尼 艾诺兼容H264编码全格式视频

    发展到现在,H.264编码视频凭借优秀的画面质量,逐渐成为视频编码领域的无冕之王,众多视频压制小组和视频下载网站都将H264编码的视频作为高清爱好者的必然选择,其资源占有率逐渐向着RMVB.AVI等前 ...

  9. h264编码与视频丢帧丢包,目标拖影,区域颜色丢失

    下面是我抄的,我和一个海康的工程师聊过,大概意思和下面一样.下面写的很细,值得借鉴. 1.丢帧的出现 说起视频播放器大家都很熟悉了,覆盖各种平台,使用简单操作方面,但是视频播放器里面的原理却非常的复杂 ...

最新文章

  1. 程序员如何乘风破浪?从数据库历史看技术人发展 | CSDN 高校俱乐部
  2. MIT自然语言处理第二讲:单词计数(第一、二部分)
  3. 5页面如何切图_如何让你的设计稿做到95%还原?
  4. java小编程--二分查找和插入排序
  5. 把多个JavaScript函数绑定到onload事件处理函数上
  6. 操作系统(12)-【Linux】索引式文件系统
  7. Nodejs中获取get请求传过来的参数_note
  8. 哥尼斯堡的“七桥问题” (25 分)(DFS)
  9. 串口软件与uPs测试,智能化UPS的软件设计及串口通信实现
  10. PHP 获取微视无水印源地址_最新抖音短视频无水印地址解析原理(抖音免费解析接口),以PHP代码为例...
  11. 常见容错机制:failover、failback、failfast、failsafe
  12. 职教云计算机考试上传图片,2017全国计算机等级考试报名关于上传图片须知
  13. 宠物网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
  14. 网页打开微信/跳转微信
  15. 『喜报』WoS数据C1和EM字段不再重复
  16. Selective Search 学习笔记
  17. 台湾国立大学郭彦甫Matlab教程笔记(1)schedule
  18. #个人日记-画展《宫崎骏与 吉トカ的世界》观后感-2021-06-20
  19. JUC——JUC强大辅助类讲解
  20. ContikiMAC RDC协议

热门文章

  1. C#使用Julia语言
  2. 易语言超文本浏览框,无法打开页面
  3. Odoo与浪潮合资研发PS Cloud之如何销售配饰及选购产品(交叉销售)
  4. 虚幻引擎_材质+后处理实现中国风水墨渲染
  5. android tv播放ftp,乐视TV超级电视FTP功能的详细使用方法步骤
  6. 如何快速生成一个web.xml 文件
  7. 团队编程项目作业2-象棋游戏设计文档
  8. 15元零代码超简单DIY小米蓝牙网关,接入玩客云homeassistant智能家居
  9. tableau高级图形的应用及可视化实现方法
  10. AR0130CSSC00SPBA0-DR CMOS数字显示器 图像传感器ON