[TI TDA4 J721E]]Decode节点解码H.264视频流生成NV12 YUV图像 使用和移植

视频处理学习笔记1:YUYV422、NV12和h264 工作中用到的是YUYV422存储格式。存储的就是裸流YUYV422格式文件。YUYV422是两个像素点共用一个UV分量,每个像素点2byte,两个像素点也就是Y00 U00 Y01 V00,4byte,也就是Y、U、V每个分量各1byte。存储结构大致如下:NV12是四个像素点共用一个UV分量,每个分量1byte。YUYV422转NV12后,存储结构大致如下:/* 计算循环次数,YUYV 一个像素点占2个字节*/ 阅读详情

          首先感谢阅读,如果您也对TDA4相关的开发感兴趣,我们这边有个学习交流微信群,可以入群和大家一起交流学习。

资历较浅,水平有限,如遇错误,请大家多指正!

保持开源精神,共同分享、进步!

博主WX : AIR_12  我会拉你入群。

链接:TDA4 相关专栏        链接:TDA4  Demo  Gitee开源库

欢迎大家加入,一起维护这个开源库,给更多的朋友提供帮助。


上一篇文章完成了YUV NV12 编码encode H264视频的功能。
[TI TDA4 J721E]USB摄像头 YUV图像视频编码生成h264 encode节点的使用_AIRKernel的博客-优快云博客

这一篇博客将尝试逆向decode,将H264视频流,解码为YUV NV12格式的图像序列。同样基于版本是0703,原因请查看上一篇博客。


一、H264简介

在进行decode解码之前,首先要了解什么是H264。

详细的文章可以参考这个博客(转载):H264--2--语法及结构_杨重选的专栏-优快云博客_h264 结构

其中最重要也是最基础的部分就是 I帧、P帧、B帧。

一个I帧+若干P帧+若干B帧,形成GOP(group of pictures)。

视频以GOP形式,流式发送,每一次发送的数据都是单独的帧(I、P、B)。

I帧是关键帧,只有收到I帧以后,这个GOP才能有效的被解码,否则此GOP无效,将被丢弃。

在程序里,为了方便,我将encode节点作为一个graph;decode作为一个graph;分开单独运行。

流程如下:(大家在走读代码的时候,一定要细心一点,读懂代码才能理解。)
1、encode node 产生 bitStream(H264视频流)
2、decode node 对此bitStream进行解码。


二、pipeline的应用及相关说明

tiovx为了提高硬件的使用效率和整体的执行速度,有一个流水线pipeline的相关操作。
官方资料入口:

比较关键的几个函数如下:

1、vxGraphParameterEnqueueReadyRef        //入队参数

2、vxGraphParameterDequeueDoneRef        //出队参数,执行此函数,则默认graph已经被执行。(这里具体要去看tiovx里面的pipeline理解一下,理解了这里,基本上pipeline就理解了一半了)。

3、tivxSetUserDataObjectAttribute                //设置入队的用户数据对象的大小。

这几个核心函数主要在如下的程序段内使用:

vx_status app_run_decodeGraph(vx_graph graph, DecodeObj *decodeObj, vx_user_data_object *bitStream)
{
    vx_status status = VX_SUCCESS;

    if (decodeObj->pipeline < 0)
    {
        /* Enqueue output */
        vxGraphParameterEnqueueReadyRef(graph, decodeObj->output_image_graph_parameter_index, (vx_reference *)&decodeObj->output_image[decodeObj->enqueueCnt], 1);

        app_copy_encodeBitStream_to_decodeBitStream(&decodeObj->bitstream_obj[decodeObj->enqueueCnt], bitStream);

        /* Enqueue input - start execution */
        vxGraphParameterEnqueueReadyRef(graph, decodeObj->input_bitstream_graph_parameter_index, (vx_reference *)&decodeObj->bitstream_obj[decodeObj->enqueueCnt], 1);

        decodeObj->enqueueCnt++;
        decodeObj->enqueueCnt = (decodeObj->enqueueCnt >= decodeObj->num_buf) ? 0 : decodeObj->enqueueCnt;
        decodeObj->pipeline++;
    }
    else if (decodeObj->pipeline >= 0)
    {
        vx_int32 array_idx = -1, img_array_idx = -1;
        vx_image out_image;
        vx_user_data_object in_bitstream;
        uint32_t num_refs;
        /* Dequeue & Save output */
        //参数说明:要出队的参数索引、被出队的对象填充该区域、最大的出队个数、实际的出队个数
        vxGraphParameterDequeueDoneRef(graph, decodeObj->output_image_graph_parameter_index, (vx_reference *)&out_image, 1, &num_refs);
        app_find_image_array_index(decodeObj->output_image, (vx_reference)out_image,
[TI TDA4 J721E]TIOVX OpenVX Graph Pipelining理解和移植使用(更新版) 关于Piplining的一些总结和使用 Enqueue 和Dequeue一些使用方法等 阅读详情

相关推荐

[TI TDA4 J721E]Encode节点编码YUV NV12图像视频生成H.264视频流 使用和移植

YUV encode H.264

AIRKernel的博客 5558

FFmpeg 解码 H264 格式的视频

解码 H264 主要分三个步骤,其一获取解码器,其二向解码器中送入 H264 NALU,其三从解码器中获取解码后的 YUV 等数据。

yinshipin007的博客 1383

gstreamer工具

gst-launch 测试模拟数据 gst-launch-1.0 -v -m videotestsrc ! autovideosink tee 图像一边播放,一边编码存储 gst-launch-1.0 -e v4l2src ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! tee name=srctee srctee. ! queue ! xvimagesink srctee. ! queue ! videoconver

evsqiezi 1288

X264支持输入NV12格式

X264支持输入NV12格式 一般编码器(例如JM)输入格式是YUV420(YV12),H.264标准也介绍的是YUV420的输入。X264编码器的输入也一般是YUV420格式,但是在内部帧的存储方式上x264采用的是NV12。因为一般编码器对U,V两通道的处理方式是相同的,例如他们有相同的QP,宏块划分,参考帧ID,运动矢量。因此对于U,V两通道的数据读取是一致的,这样NV12 UV两通道

huibailingyu的专栏 6787

Gstreamer硬解码RTSP流:从H264到NV12的完整实现

本文详细介绍了在Ubuntu环境下使用Gstreamer框架实现RTSP流硬解码的完整方案。通过构建从rtspsrc到appsink的完整管道,利用nvh264dec插件将H264视频流高效解码为NV12格式,显著降低CPU占用,适用于安防监控、视频会议等实时视频处理场景。文章包含环境搭建、核心概念、代码实现及避坑指南。

a0b1c2d3的专栏 994

UVC webcam添加H264 NV12等格式支持

linux webcam 驱动默认仅支持YUY2 和 MJPG 两种格式,这也是大部分USB摄像头和应用支持的格式 下面讲讲如何添加新的格式支持: (1)修改kernel\drivers\usb\gadget\function\uvc_v4l2.c 添加新的格式支持,这里新增了H264、NV12和RGB565 static struct uvc_format uvc_formats[] = { { 16, V4L2_PIX_FMT_YUYV }, { 0, V4L2_PIX_FMT_M..

u013463707的专栏 4245

关于NVIDIA显卡编解码能力

无论是使用N卡硬编还是硬解,首先最好了解手里这个显卡的编解码能力,它是否能符合你的要求?

性情中的小完熊 6460

欧姆龙OMRON PLC之HostLink通讯协议(四)-FINS命令进阶应用与调试技巧

本文深入探讨欧姆龙OMRON PLC的HostLink通讯协议中FINS命令的进阶应用与调试技巧。文章聚焦实战排错,详细解析命令帧解剖、响应帧解读与网络抓包三大核心方法,并分享性能优化策略,如合并读写与异步设计。同时介绍了强制操作、多存储区访问等高级命令的应用场景,旨在帮助工程师高效解决现场通讯问题,提升系统稳定性与效率。

nept的博客 751

MacOS下Mixly 2.0安装避坑指南:从Java环境到终端权限全解析

本文详细解析了在MacOS系统上安装Mixly 2.0时可能遇到的核心问题与解决方案。针对Java环境版本不兼容、MacOS Gatekeeper安全机制拦截以及终端权限不足三大常见障碍,提供了从检查并配置正确Java版本、安全设置绕过到彻底解决应用内部工具链权限的完整避坑指南,帮助用户顺利完成安装并正常使用。

weixin_29231725的博客 503

DSP28335做FFT傅里叶变换

1. 看了一下例程,居然没有FFT的例程,难道这个DSP28335不能做FFT吗?对了C2000系列是有C2000 ware这个库的。方便很多,不过目前不确定在C5000上运行的FFT能直接迁移到DSP28335上行不?测试了一下,是可以的,因为都是用的math.h,下面的一些正弦函数基本一样的 2. 硬件简介,其中DSP28335和TLV320AIC23B之间使用I2C接口进行寄存器配置,...

weixin_30390075的博客 3331

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2289

老服务器焕新记:在Dell R730上折腾Nvidia K80显卡的完整记录(含Anaconda环境配置)

本文详细记录了在Dell R730服务器上为Nvidia K80计算卡安装驱动、配置CUDA及Anaconda环境的完整过程。文章重点解决了老旧硬件与CentOS 7系统的兼容性问题,提供了从BIOS设置、驱动版本精准匹配到Python机器学习环境搭建的实战指南,旨在帮助读者低成本挖掘旧服务器的GPU计算潜力。

weixin_29197835的博客 504

Ubuntu16.04下禁用scp、sftp和winscp

在上一篇博文《Ubuntu16.04 搭建FTP服务器,设置用户权限为只许上传、禁止下载和删除》中,我讲述了Ubuntu16.04下配置FTP,并且设定用户权限为只能上传数据,禁止下载和删除数据。这算在FTP层面封堵了服务器数据泄露的途径。 但是,Ubuntu系统的scp和sftp还是起作用的,理论上只要能用本地机器ping通服务器,就可以用scp和sftp下载数据,这还是存在数据泄露可能的,所...

HPC&Geophysics攻城狮 5737

遥感大模型之Prithvi的关键技术解读

Prithvi系列模型开创了遥感领域基础模型新范式,通过海量多源时空数据(HLS和SAR)与Vision Transformer架构的深度融合,采用掩码自编码器进行自监督预训练,实现了强大的地球观测表征能力。该技术体系突破传统方法在全局建模、多模态融合和时空分析上的局限,仅需少量标注数据即可在土地分类、灾害监测等任务上取得优异表现。从初代3亿参数到Prithvi-EO-2.0的10亿参数升级,展现了模型可扩展性,为构建地球数字孪生智能基座奠定基础。

panshengwu的博客 867

【Metashape精品教程4】软件设置

介绍Metashape软件设置

penglu366366的博客 2950

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: [TI TDA4 J721E]Encode节点编码YUV NV12图像视频生成H.264视频流 使用和移植
下一篇: [TI TDA4 J721E]TIOVX Image图像相关操作(修正版)
AIRKernel
博客等级 码龄5年 467粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值