H.264视频编解码的代码移植和优化

H.264视频编码 MATLAB实现H.264视频读取 帧间预测 分块类型比较 立即下载
 
H.264视频编解码的代码移植和优化
作者:titan    时间:2007-11-03    来源: 
 
      

基于DSP系统开发的视频编解码系统,国内几乎都是走的移植,优化的路线,并且移植的代码,都是开源的。毕竟花费大量的人力,物力去开发一套自己的代码,并不见得比一些成熟的开源代码效率更高,健壮性更好。更何况开发速度对于一个产品的发展而言,更是重要。

目前对于H.264而言,移植的代码主要有JM,x264和T264。移植的时候,就需要对各个代码进行测试,以确定要移植的代码。相对而言,JM的移植更容易,但效率比较差,如果基于科学研究,移植JM的比较多,多见于各高校的研究人员。对企业而言,考虑到实时性的要求,移植以X264和T264居多。

将视频编解码移植到DSP的时候,考虑到DSP系统资源的宝贵,主要考虑的因素是系统空间,包括程序空间和数据空间,所以需要对原始的C代码,进行评估,这就需要对于所移植的代码有一个比较详细的了解。代码空间一般可以通过map文件进行估算。数据空间的估计,需要计算程序中内存的使用情况,除了malloc申请的空间,还包括静态数组,主要是H.264标准中的各种表格数组以及一些全局变量等等。

准备好了这些,就可以开始移植了,移植,也是一个考验你的过程。

做好了移植的准备工作,就进入了开发过程的第一个重要阶段---移植。

移植开发的时候,最好准备两个版本,一个纯C代码,在VC下编译,运行,另一个是VDSP下的版本(ccs同理),VC版本主要是验证代码运行是否正确,VDSP版本就是移植以后的版本,两个版本同步更新,即尽量保持两个版本的一致性,但能够同时在VC和VDSP下运行。在移植过程中,一般会遇到的问题如下:

1.头文件的不同,一般问题都是linux下的头文件,在VDSP中没有存在。最典型的就是inttypes.h 和 stdint.h,这种头的作用主要是定义了8字符,16字符,32字符,64字符的数据类型,移植的时候,可以自己建一个头文件或者直接在其他的头文件中把这些数据类型的定义加进去,这样的话,就不会出现问题。其他的类似,要么找相应的头文件替换,要么干脆自己定义。

2.Int64_t和Uint64_t 的问题, 在第一步中,其实也存在这个问题, 不过我最初是用long和Unsigned long 来代替,不过这样的话,编译是可以通过,但仔细分析,其实是有问题的。一般来讲,64位数的用途有两个,第一种是这个数字可能比较大,当累积到一定的程度,可能超过32位,这种情况下,可以用32位代替,不过最好加上注释,告诉自己这个数可能越界,在后面调试的时候,要提示自己注意一下。另一种用途,是开发者为了速度的要求,对一些变量复制的时候,使用了强制性的指针赋值,这种情况下,就不能直接该成32位数据了,那样的话,虽然编译通过,后面运行,肯定有错误的。这种情况下,可以使用32位数据类型,分两条语句对变量赋值,当然,这是个时候要千万注意,不要把地址搞错了。

3. Inline的问题,移植以后,编译的时候Inline经常会报错。虽然有编译选项可以去掉错误,不过你如果和我一样不熟悉的话,直接去掉 Inline关键字,到后面随着对VDSP熟悉以后,如果有优化的需要,再按照VDSP的语法,为自己想要嵌入的函数增加Inline关键字。

经过上面的修改,一般情况下,编译就没有问题了,当然,这只是移植的第一步。距离成功,还很远!

代码可以编译了以后,你可以尝试着运行,一般情况下,都会出错,并且,链接都会有问题,所以,还需要进行一下工作。

1. 配置LDF文件。因为刚移植的代码,往往数据和程序都非常大,所以,SRAM里面肯定是放不下的,这个时候,链接就会有问题。刚开始的时候,最好把所有的程序和数据都放在SDRAM里面去,这样的,链接就不会有问题了。Stack和heap情况类似,开始的时候,都先放到SDRAM。开始的时候,你需要的是一个可以运行正确的程序,速度倒在其次。

2.Malloc的问题。DSP下的开发,malloc都是一个需要解决的问题。动态申请内存,就算可以运行,结果往往也是不对的。所以,最好进行静态分配,用数组的形式分配,这样做的好处是可以方便自己管理,那些数组多大,放在那里,自己都很清楚,因为优化的时候,有一些是要放在SRAM中,另外一些特别大的才放在SDRAM中,这样才能取的比较好的效果,另外,静态数组也稳定性一些,不需要记着去释放。

3.文件操作。在VDSP的SETTING下,有一个STDIO的开关,其实可以支持文件操作,但是我调试的时候发现,有些情况下是有问题的。比如我在一个循环中使用fread,但是他只有第一次的读取是有效的,但有些时候,它好像又可以。所以,你调试的时候,如果发现结果和VC下运行的不同,可以重点看看,是不是这里出了问题。

4.调试跟踪。经过上面的准备,程序已经可以运行了。你可以在Simulator下仿真,或者板子上直接仿真。在SI下,速度会很慢,不过Sesion里面,有一个blackfin family那个sision,速度还可以,当然,有板子会更好。我们开发的时候,我使用板子的时间总共不到两个月,所以浪费了很多时间,现在回头看看,好心痛。

调试结果OK了的话,说明移植已经成功了。就可以进入下一个最主要的阶段---优化了。

移植搞好了以后,就可以进行优化了,优化是一个长期的,枯燥的,但很有挑战性的工作。做优化,你要熟悉blackfin的汇编指令,熟悉H.264标准,熟悉你所移植的代码结构,在优化过程中,的确是很枯燥的,需要你很有耐性,经常会因为一个小小的错误,让你跟踪几天甚至几星期,但是,当你看到随着你工作的不断进展,程序需要的cycle数越来越少,还是很有成就感的。

在blackfin上做优化,最主要的工作可以分为:

1.系统结构优化。

2.汇编优化。

3 cache和DMA优化。

一个好的优化程序,这几个方面肯定都会涉及。至于各自所起的作用,我没有详细测试。系统结构优化和汇编优化可以先进行。等做到一定程度了,再进行cache和DMA的优化。

H.264jm86代码ccs版本 jm86移植到ccs3.1中的代码 里面包含详细使用说明 立即下载

相关推荐

海思HI35xx平台h264解码实例

海思HI35xx平台h264解码实例是基于海思Hi35xx平台编写的C源码,指在说明如何利用海思提供的API进行h264视频解码的软件设计。

H.264/AVC视频编解码技术详解

H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术。本课程将从原理、标准和实现等多个角度,详细讲述了H.264/AVC视频编码标准的整体架构与技术细节,不但讲解了H.264/AVC标准协议文档中的内容,还通过实际的H.264码流分析/解码程序的开发来帮助观众更深入地理解H.264编码标准的原理。

h.264视频编解码源代码.rar

h.264视频编解码源代码.rar 详细说明:h.264标准代码,用于视频编码!可以实现各种视频的编码和解码,可以在这个代码的基础上进行各种开发,比如算法的优化,转码技术,实现各种分辨了的转码-h.264 standard code, uses in the video frequency code! May realize each kind of video frequency code and the decoding, may carry on each kind of development in this code foundation, for instance the algo

H.264代码DSP平台移植

基于DSP系统开发的视频编解码系统,国内几乎都是走的移植,优化的路线,并且移植的代码,都是开源的。毕竟花费大量的人力,物力去开发一套自己的代码,并不见得比一些成熟的开源代码效率更高,健壮性更好。更何况开发速度对于一个产品的发展而言,更是重要。目前对于H.264而言,移植的代码主要有JM,x264和T264。移植的时候,就需要对各个代码进行测试,以确定要移植的代码。相对而言,JM 的移植更容易,

lvxuguang的专栏 1586

H.264视频编码器的实现

H.264视频编码器的实现有多种方法,不过大部分都是进行移植、优化的操作。H.264代码要在DSP的软件平台CCS环境下运行,需要注意几个问题:如配置文件、库文件的改动、数据类型的调整、汇编程序的处理、内存终结模式的调整等。

VS2022 LNK1168无法打开进行写入 解决办法

C语言编程---VS---错误和警告---链接器工具错误---LNK1168--无法打开进行写入

weixin_67166415的博客 7162

【转】H.264视频编解码的代码移植和优化

基于DSP系统开发的视频编解码系统,国内几乎都是走的移植,优化的路线,并且移植的代码,都是开源的。毕竟花费大量的人力,物力去开发一套自己的代码,并不见得比一些成熟的开源代码效率更高,健壮性更好。更何况开发速度对于一个产品的发展而言,更是重要。目前对于H.264而言,移植的代码主要有JM,x264和T264。移植的时候,就需要对各个代码进行测试,以确定要移植的代码。相对而言,JM的移植更容易,但效率比较差,如果基于科学研究,移植JM的比较多,多见于各高校的研究人员。对企业而言,考虑到实时性的要求,移植以X26

Eason_Hsu的专栏 735

基于MobileNet⁃DOA的无人机射频信号识别方法

本文提出了一种基于MobileNet-DOA模型的无人机射频信号识别方法,用于解决低信噪比环境下无人机型号和飞行模式识别率低的问题。该方法首先采用变分模态分解(VMD)进行信号预处理以降低噪声干扰,然后通过短时傅里叶变换(STFT)将信号转换为时频图。在模型设计上,将DOConv卷积融入MobileNetv4模型以增强特征提取能力并提高运算速度,同时引入FA注意力机制提升低信噪比环境下的识别精度。实验结果表明,该方法在-15~15dB信噪比范围内的平均识别准确率达到94.83%,显著优于现有方法,特别在-1

qq_43416206的博客 1350

解析H.264视频编解码DSP实现与优化

引言   基于互联网的数字视频产业前景看好,而3G的规模部署,也会推动移动视频通信成为现实。但数字化后的视频图像具有数据海量性,给图像的存储和传输造成较大的困难。数字视频产业,是指数字内容中以数字视频形态为主的文化创意和传播产业,及其必需依赖的多学科高科技技术支撑和保障服务产业。为此,该专家组基于帧内图像相邻像素间及相邻行间的空间相关性和相邻帧间运动图像的时间相关性,采用压缩编码技术,将那些对人...

mmdev 717

阻容降压 vs 开关电源:5V小功率供电方案成本与安全深度对比

本文深度对比了阻容降压电路与开关电源在5V小功率供电方案中的核心差异。重点剖析了二者在成本、体积、效率、温升及安全隔离等方面的优劣,并结合智能温控器、LED驱动等典型应用场景,为硬件工程师提供了清晰的选型决策框架,帮助在成本与安全之间做出最佳权衡。

weixin_29310631的博客 702

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)

在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。

darcsdn 2128

x264博文收集

http://hi.baidu.com/yeyingxian/blog/category/Ffmpeg http://hi.baidu.com/hainei_/blog/category/h.264%CA%D3%C6%B5%B1%E0%BD%E2%C2%EB [转载]x264_mb_analyse_inter_p16x16   [转载]X264框架   [转]分析一段2

fangbaolei2088的专栏 986

Intel RealSense D435深度相机实战:从数据采集到点云生成的完整避坑指南

本文详细介绍了Intel RealSense D435深度相机的实战应用,从数据采集到点云生成的完整流程,并提供了避坑指南。内容包括环境配置、硬件调优、数据采集技巧、点云生成核心技术及典型场景解决方案,帮助开发者高效利用D435进行机器人导航、三维重建等应用。

weixin_29054195的博客 474

H264实时编解码

      最近在PC上移植了H.264 encoder and decoder 代码,代码都是基于x.264早新版本编码器, FFMPGE 的解码器. APIs简单,同时对代码结构做了一些优化,现在已应用于到产品。在些记录一下,现在工作也开始涉及到video codec. 大家有相关问题我们可以一起交流学习。...

weixin_34236869的博客 320

C2f-DCN模块详解:可变形卷积与特征融合的完美结合

C2f模块作为YOLOv8的核心创新,代表了目标检测特征提取模块设计的最新进展。通过精简的卷积配置(仅2个基础卷积)、高效的特征重用设计(部分通道分割复用)、以及深层语义与浅层细节的协同建模能力,C2f在结构设计和性能表现上全面超越了前代的C3模块。与C3K2、C3K等变体相比,C2f在遮挡和密集环境下的检测鲁棒性更优,而C3K2和C3K分别在高速检测和多尺度检测方面有专门优化。这种差异化设计反映了YOLO系列模型向场景化、专业化发展的趋势。从设计原理角度看,C2f的核心优势在于其多路径梯度流动优化和。

浩瀚之水的专栏 379

App 抓包难?Frida Hook 实战:绕过 SSL Pinning (证书绑定) 抓取某大厂 App 核心接口

当我们使用 Charles 抓包 HTTPS 时,本质上是实施了MITM(中间人攻击)。Charles 伪装成服务器,发给 App 一个自己的证书(伪造证书)。Charles 伪装成 App,拿着真正的证书去请求服务器。如果 App 只是简单校验“证书是否由受信任的 CA 签发”,那你把 Charles 的根证书安装到手机系统里,就能骗过它。但是,是 App 内置了服务器证书的Hash(指纹)。

BUG猿的博客 921
上一篇: symbian 3rd内存泄露查找(转帖)
下一篇: Stan Lippman VLSP课程培训笔记 汇总
code_farmer
博客等级 码龄22年 9粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值