【GPU编解码】GPU硬编码 (转)
一、OpenCV中的硬编码
OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下。
1 int main(int argc, const char* argv[])
2 {
3 if (argc != 2)
4 {
5 std::cerr << "Usage : video_writer <input video file>" << std::endl;
6 return -1;
7 }
8
9 const double FPS = 25.0;
10 cv::VideoCapture reader(argv[1]);
11
12 if (!reader.isOpened())
13 {
14 std::cerr << "Can't open input video file" << std::endl;
15 return -1;
16 }
17
18 cv::gpu::printShortCudaDeviceInfo(cv::gpu::getDevice());
19 cv::gpu::VideoWriter_GPU d_writer;
20
21 cv::Mat frame;
22 cv::gpu::GpuMat d_frame;
23
24 for (int i = 1;; ++i)
25 {
26 std::cout << "Read " << i << " frame" << std::endl;
27 reader >> frame;
28 if (frame.empty())
29 {
30 std::cout << "Stop" << std::endl;
31 break;
32 }
33 cv::resize(frame,frame,cv::Size(704,576));
34 if (!d_writer.isOpened())
35 {
36 std::cout << "Open GPU Writer" << std::endl;
37
38 d_writer.open("output_gpu.avi", frame.size(), FPS);
39 }
40 d_frame.upload(frame);
41 std::cout << "Write " << i << " frame" << std::endl;
42 d_writer.write(d_frame);
43 }
44 return 0;
45 }

深入阅读cv::gpu::VideoWriter_GPU类的实现,发现其底层编码实现是基于NVCUVENC库,视频文件的封装是FFmpeg。
二、NVCUVENC库
NVCUVENC库是NVIDIA公司提供的视频编码库,可以实现H.264的GPU编码,接收原始YUV frames数据,编码产生NAL packets。
利用NVCUVENC库进行视频硬编码的基本步骤如下:
1.检测是否支持NVCUVENC
2.新建编码器,设置编码类型
3.设置编码参数,注册回调函数
4.创建编码器相关资源
5.循环编码每帧数据
6.删除编码器,释放资源
伪代码示意图如下所示,其中编码前缓冲区的分配,以及编码后的数据处理都由回调函数。

回调函数说明:
AcquireBitstream() 分配coded bitstream缓冲区
ReleaseBitstream() 处理、保存coded bitstream
OnBeginFrame() 编码前的初始化工作
OnEndFrame() 编码后的统计工作
回调函数的调用顺序:

【GPU编解码】GPU硬编码 (转)的更多相关文章
- 【视频开发】GPU编解码:GPU硬解码---DXVA
GPU编解码:GPU硬解码---DXVA 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解码可分四级:VLD,控制BitStream;IDCT,反 ...
- 【GPU编解码】GPU硬编码
一.OpenCV中的硬编码 OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下. int main(int argc, ...
- 【GPU编解码】GPU硬解码---CUVID
问题描述:项目中,需要对高清监控视频分析处理,经测试,其解码过程所占CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈. 解决思路: 利用GPU解码高清视频,降低解码所占用CPU资源,加速解 ...
- 【GPU编解码】GPU硬解码---DXVA
前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解 ...
- 【GPU编解码】GPU硬解码---DXVA (转)
前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解 ...
- 视频编解码---x264用于编码,ffmpeg用于解码
项目要用到视频编解码,最近半个月都在搞,说实话真是走了很多弯路,浪费了很多时间.将自己的最终成果记录于此,期望会给其他人提供些许帮助. 参考教程: http://ffmpeg.org/trac/ffm ...
- [编解码] 关于base64编码的原理及实现
转载自: http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html [Base64]-base64的编码都是按字符串长度,以每3个8b ...
- 图像压缩编解码实验(DCT编码+量化+熵编码(哈夫曼编码))【MATLAB】
课程要求 Assignment IV Transform + Quantization + Entropy Coding Input: an intra-frame or a residue pict ...
- 【并行计算与CUDA开发】基于NVIDIA显卡的硬编解码的一点心得 (完结)
原文:基于NVIDIA显卡的硬编解码的一点心得 (完结) 1.硬解码软编码方法:大体流程,先用ffmpeg来读取视频文件的包,接着开启两个线程,一个用于硬解码,一个用于软编码,然后将读取的包传给解码器 ...
随机推荐
- PHP数组序列化和反序列化
PHP序列化在我们实际项目运行过程中是一种非常常见的操作.比如当我们想要将数组值存储到数据库时,就可以对数组进行序列化操作,然后将序列化后的值存储到数据库中.其实PHP序列化数组就是将复杂的数组数据类 ...
- webservice restful一个小例子
需求 公司有一个产品,包括前台WEB界面和多个后台服务,各个服务都需要在前面界面中进行配置和控 制,以调整服务的行为.以前,配置文件都存放在数据库中,界面上修改配置后入库,并发送消息(Socket)通 ...
- 《剑指offer》-旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...
- 《剑指offer》-铺地砖方案数
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 又是斐波那契...稍微变形一下. class Solution { pub ...
- django的FormView中,自定义初始化表单数据的曲折方法
这个技巧,主要是用于表单初始化及回显. 也就是说,如果用户的数据库里有数据,则要将相应的数据显示在表单里, 如果用户的数据库里没有数据,才会生成一个空白的表单给用户, 这样才显得专业塞! 而我面对的尴 ...
- Bitmap在Java中的应用
一.40亿数据排序问题 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失这样一个数——为什么?).在具有足够内存的情况下,如何解决该问题?(编程 ...
- 虚树------sdoi2011<消耗战>
卡着时间过得,大概是因为全用了ll,时间涨了一倍吧?? 懒得改了,第一道虚树还是思路比较重要 下面这段文字是复制来的: 给出一棵树. 每次询问选择一些点,求一些东西.这些东西的特点是,许多未选择的点可 ...
- 手动卸载Office2010
手动卸载Office2010视频 http://v.youku.com/v_show/id_XNTE3MTMwNDUy.html 其中遇到Application Data文件夹打不开 http://z ...
- 【开源小软件 】Bing每日壁纸 V1.2.1
Bing每日壁纸发布V1.2版本,下载地址Release V1.2.1 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 本次新增国际化支持,以及桌面widg ...
- 存储过程,存储函数(Oracle)
存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 存储过程和存储函数的区别? 存储函数:可以通过return 语句返回函数值. 存储过程:不能 除此之外我们可以认为 ...