GPU硬编码---NVCUVENC
来源:互联网 发布:淘宝内部优惠券推广员 编辑:程序博客网 时间:2024/06/09 23:40
一、OpenCV中的硬编码
OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下:
int main(int argc, const char* argv[]){ if (argc != 2) { std::cerr << "Usage : video_writer <input video file>" << std::endl; return -1; } const double FPS = 25.0; cv::VideoCapture reader(argv[1]); if (!reader.isOpened()) { std::cerr << "Can't open input video file" << std::endl; return -1; } cv::gpu::printShortCudaDeviceInfo(cv::gpu::getDevice()); cv::gpu::VideoWriter_GPU d_writer; cv::Mat frame; cv::gpu::GpuMat d_frame; for (int i = 1;; ++i) { std::cout << "Read " << i << " frame" << std::endl; reader >> frame; if (frame.empty()) { std::cout << "Stop" << std::endl; break; } cv::resize(frame,frame,cv::Size(704,576)); if (!d_writer.isOpened()) { std::cout << "Open GPU Writer" << std::endl; d_writer.open("output_gpu.avi", frame.size(), FPS); } d_frame.upload(frame); std::cout << "Write " << i << " frame" << std::endl; d_writer.write(d_frame); } return 0;}
深入阅读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() 编码后的统计工作
回调函数的调用顺序:
0 0
- GPU硬编码---NVCUVENC
- GPU编解码 - 硬编码
- OpenCV中利用GPU硬编码
- 【计算机视觉】【并行计算与CUDA开发】GPU硬编码
- GPU硬解码---CUVID
- GPU硬解码---DXVA
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码与硬编码
- 谈谈硬编码
- 硬编码科普1
- 什么是硬编码 hardcode
- 硬编码实例
- Android 关于回调的那些事
- JVM的重排序问题
- 开发日志:No result defined for action *.*.xxxAction and result input - action
- SQL教程-
- [Sage ERP X3 V7首推]Sage ERP X3全盘缩减开支
- GPU硬编码---NVCUVENC
- android手势监听需要注意的地方
- ODL开发学习笔记@北邮-Kobe
- Android任务和返回栈完全解析,细数那些你所不知道的细节
- 正则表达式
- Scala讲座:类定义和构造函数
- 常用的正则表达式及jQuery.validator运用正则验证
- ZOJ 3322 Who is Older?
- 无法启动此程序,因为计算机中丢失MSVCP120D.dll