视频解码

  • 概述
  • 编译运行
  • 流程图
  • 关键类和结构体
  • 代码分析

概述

视频解码示例应用程序演示如何使用libv4l2组件分配的缓冲区来解码H.264、H.265、vp8、vp9、mpeg4或mpeg2视频流。
应用程序读取H.264、H.265、VP8、VP9、MPEG4或MPEG2基本视频文件,对其进行解码,并将其传递给EGL渲染器,以显示解码图像,而无需任何额外的内存copy。
支持的视频格式有:

  • H.264

  • H.265号

  • VP8型

  • VP9型

  • MPEG4标准

  • MPEG2标准

编译运行

$ cd $HOME/multimedia_api/samples/00_video_decode$ make

运行

 $ ./video_decode <in-format> [options] <in-file>
$ ./video_decode H264 ../../data/Video/sample_outdoor_car_1080p_10fps.h264

流程图


1.Output Plane接收比特流格式的输入并将其传送给解码器进行解码。
2. 应用程序将解码后的帧以yuv格式传输到Capture Plane。
3. 对于Output Plane,应用程序支持MMAP和USRPTR内存类型。对于Capture Plane,它支持MMAP和DMABUF内存类型。
4. 应用程序还可以从 Capture Plane转储文件。

关键类和结构体

关键的类有两个:NvVideoDeocder,NvEglRenderer,前者是硬件解码器,后者是显示用的渲染器,用于显示图像。
NvVideoDeocder里面有一些成员函数,
NvVideoDecoder包含以下成员:

元素 描述
output_plane V4l2 output plane
capture_plane V4l2 capture plane
createVideoDecoder 创建Decoder的静态函数
subscribeEvent 订阅事件
setExtControls Set external control to V4l2 device
setOutputPlaneFormat Set output plane format.
setCapturePlaneFormat Set capture plane format.
getControl TBD
dqEvent Dqueue the event which report by V4l2 device.
isInError Check if under error state.

NvVideoDecoder有两个关键成员,output_plane and capture_plane 都继承自NvV4l2ElementPlane.包含以下成员:

Element Description
setupPlane Setup the plane of V4l2 element.
deinitPlane Destroy the plane of V4l2 element.
setStreamStatus Start/Stop the stream.
setDQThreadCallback Set the callback function of dqueue buffer thread.
startDQThread Start the thread of dqueue buffer.
stopDQThread Stop the thread of dqueue buffer.
qBuffer Queue V4l2 buffer.
dqBuffer Dqueue V4l2 buffer.
getNumBuffers Get the number of V4l2 buffer.
getNumQueuedBuffers Get the number of V4l2 buffer which under queue.
getNthBuffer Gets the NvBuffer object at index n.

代码分析

下面来看一下代码的具体流程。
程序使用一个

Tegra_Multimedia API 例程学习之--00_video_decode相关推荐

  1. 【学习总结】-Apsara Clouder专项技能认证:实现调用API接口学习总结

    Apsara Clouder专项技能认证:实现调用API接口-学习总结 API的概念: API的特点: API的分类: 为什么要使用API 阿里云API市场 API请求与认证 Web API协议 HT ...

  2. 阿里云Apsara Clouder专项技能认证-实现调用API接口-学习笔记

    Apsara Clouder专项技能认证-实现调用API接口-学习笔记 阿里云的一个小认证,闲来无事,考一下 一.API简介 API的概念 API(Application Programming In ...

  3. 今晚直播 | 谷歌资深工程师手把手教你使用TensorFlow最新API构建学习模型

    目前,深度学习的研究和应用大受追捧,各种开源的深度学习框架层出不穷.TensorFlow 作为目前最受欢迎的深度学习框架,已经在 GitHub 上获得了 112194 个 star,受欢迎程序可见一斑 ...

  4. Halcon例程学习:adaption_ocv.hev(光学字符检测)

    **************************************************************************************************** ...

  5. Halcon例程学习:print_check.hev(光学字符检测)

    **************************************************************************************************** ...

  6. 通过 Land of Lisp 中的超简短字符游戏例程学习 loop 和 format

    2019独角兽企业重金招聘Python工程师标准>>> 通过 Land of Lisp 中的超简短字符游戏例程学习 Common Lisp 的 loop 和 format 介绍 在 ...

  7. 2.python爬虫实战:爬取近5年的中国大学排行榜信息【Python】(测试代码+api例程)

    目录 API说明: 思路 注意事项 完整代码 总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 爬取近5年的中国大学排行榜信息,在python爬虫爬取2 ...

  8. 如何借助官网例程学习STM32

    如何借助官网例程学习STM32 现在STM32的资料已经非常多了,那么假如市场上这款芯片刚刚出现,没有可参考的TB店家,应该怎么办呢?答案是可以参考官网例程! 1.首先打开官方网址:https://w ...

  9. 【安卓】1.修改按钮样式之圆角按钮+按钮图标(保姆级图文+附示例+api例程)

    目录 1.按钮图标 1.1获取按钮图标文件 1.2 按钮图标API说明: 1.3 按钮图标基本例程 2.按钮样式文件 2.1 new_button_style.xml 2.2 color.xml 2. ...

最新文章

  1. [转]html5: postMessage解决跨域和跨页面通信的问题
  2. 【SeeMusic】音符方块颜色设置 ( 单一颜色设置 | 多彩音符设置 | 定时变色设置 | 渐变颜色 | 分轨道提示 )
  3. Java 8 - Stream流骚操作解读
  4. JavaScript中getter/setter的实现
  5. 【Java代码】Lamda表达式将List对象中的Map对象的key全部转化为大写或者小写【去除外层循环:可用于Map对象中的key全部转化为大写或者小写】
  6. php获取字符串商都_php strlen获取字符串字节长度和mb_strlen获取字符串个数长度的区别(strlen获取中文长度)...
  7. USACO Section 1.2 Greedy Gift Givers (简单查找)
  8. MD5加密以及产生唯一的ID
  9. [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块
  10. 今天闲来无事,做了个简易的ORM 感觉有点像ActiveRecord作业风格,又有点像iBatis...
  11. 32 道常见的 Kafka 面试题
  12. deepin安装 oracle_deepin 安装oracle12c过程
  13. C语言求三角形斜边长
  14. MySQL报错: Incorrect string value: '\xE5\x85\xA8\xE7\x90\x83...' for column 'cname' at row 1
  15. 创业公司的融资阶段:天使轮、种子轮、A轮、C轮、E轮到底是什么意思?
  16. H5前端性能测试点及优化方法
  17. 本科进了大厂拿高薪,为什么硕士和博士却要挤破头进高校?
  18. 优学院计算机基础网课答案,最新网课答案2020优学院大学计算机基础
  19. 【大数据分析软件应用在足球预测实例】足球滚球走地大小球分析方法和技巧
  20. WinForm使用Prism和DryIoc实现跨窗体数据绑定

热门文章

  1. 配置jupyter notebook时出现jinja2错误
  2. phpStudy Apache 启动失败问题解决
  3. 智慧医院智能化系统设计与能耗管理产品选型
  4. C#【高级篇】.NET平台调用Win32 API
  5. linux--vi和vim
  6. 【F28335】EALLOW和EDIS指令的使用
  7. lynx更新动态域名
  8. 南阳oj 题目290 动物统计加强版 字典树
  9. Tensorflow 源码分析-会话与线程池之间的关系
  10. Oracle的PL/SQL编程