代码:JM12.2.编码结构:IPP。GOP:3. 跟踪代码:(注:表示编码主流程,表示RC流程) ---------------------------------------------------------------------------------------------- 进入main(),首先调用init_global_buffers().进入init_global_buffers(),调用两个函数generic_alloc( &generic_RC )//Dynamically allocate memory needed for generic rate control 和rc_alloc( &quadratic_RC )//Dynamically allocate memory needed for rate control。然后进入rc_init_seq(rc_quadratic *prc) //Initialize rate control parameters。这三个函数在整个流程中只调用一次。 ---------------------------------------------------------------------------------------------- 编码循环开始。调用rc_init_GOP(rc_quadratic *prc, int np, int nb) //Initialize one GOP。 ---------------------------------------------------------------------------------------------- 开始编码第一帧。I帧。 进入encode_one_frame(),调用rc_init_pict(rc_quadratic *prc, int fieldpic,int topfield,int targetcomputation, float mult) //Initialize one picture。接着调用updateQP(quadratic_RC, 0) //compute a quantization parameter for each frame.调用frame_picture()//Encodes a frame picture。进入frame_picture(), 调用code_a_picture()//Encodes a picture. 进入code_a_picture(),调用encode_one_slice() //Encodes one slice。进入encode_one_slice(),调用encode_one_macroblock() //Mode Decision for a macroblock, 进入encode_one_macroblock(),调用update_rc()//Update Rate Control Parameters,接着调用handle_qp(Macroblock *currMB, short best_mode) //Update QP Parameters (critical in case of SKIP MBs or MBAFF). 编码完一帧以后调用rc_update_pict_frame(rc_quadratic *prc, int nbits) //update after frame encoding。最后调用rc_update_pict(rc_quadratic *prc, int nbits) //update one picture after frame/field encoding. 第一帧I帧编码完成。 ---------------------------------------------------------------------------------------------- 开始编码第二帧。第一个P帧。 循环再次调用encode_one_frame()。现在编码的是P帧。调用rc_init_pict(),接着调用updateQP(),进入updateQP(),调用updateFirstP( rc_quadratic *prc, int topfield ) //计算第一个P帧的量化参数。调用frame_picture()。进入frame_picture(), 调用code_a_picture()。进入code_a_picture(),调用encode_one_slice() 。进入encode_one_slice(),对宏块进行编码循环。先调用start_macroblock(),如果已编码宏块数大于0并且是基本单元宏块数的整数倍,则调用updateRCModel(rc_quadratic *prc) //update the parameters of quadratic R-D model。进入updateRCModel(),调用QP2QStep(),接着调用两次RCModelEstimator()。之后调用updateMADModel,然后调用updateQP()。进入updateQP(),调用updateFirstP().然后调用encode_one_macroblock(), 进入encode_one_macroblock(),调用update_rc()接着调用handle_qp()。 ***需要注意的一点:对于第一个基本单元,进入updateRCModel之后,在调用完两次RCModelEstimator之后,没有调用updateMADModel。从第二个基本单元开始,才进入updateMADModel。进入updateMADModel以后,会调用MADModelEstimator。并且,编码第一个P帧时调用updateMADModel没有任何作用。只有在编码第二个P帧开始,updateMADModel才会起作用。*** 编码完一帧以后调用rc_update_pict_frame。接着调用rc_update_pict().调用updateRCModel(),进入updateRCModel(),调用两次RCModelEstimator()。之后调用updateMADModel。进入updateMADModel,这个时候updateMADModel函数会起作用了。它调用MADModelEstimator,更新参数之后并再次调用MADModelEstimator。 第一个P帧编码完成。 ---------------------------------------------------------------------------------------------- 开始编码第三帧,即第二个P帧。 调用encode_one_frame()。调用rc_init_pict(),接着调用updateQP(),进入updateQP(),由于是第一个基本单元,调用updateFirstBU( rc_quadratic *prc, int topfield )。之后调用frame_picture()。进入frame_picture(), 调用code_a_picture()。进入code_a_picture(),调用encode_one_slice() 。进入encode_one_slice(),对宏块进行编码循环。调用encode_one_macroblock(), 进入encode_one_macroblock(),调用update_rc()接着调用handle_qp()。编码的宏块数超过一个且是基本单元宏块数的整数倍时,调用在start_macroblock里面的updateRCModel。进入updateRCModel(),调用QP2QStep(),接着调用两次RCModelEstimator()。之后调用updateMADModel,进入updateMADModel,调用两次MADModelEstimator。然后调用updateQP()。进入updateQP,如果Target<0,调用updateNegativeTarget( rc_quadratic *prc, int topfield, int m_Qp ),否则会:调用predictCurrPicMAD,接着调用updateModelQPBU(rc_quadratic *prc, int topfield, int m_Qp),如果是最后一个基本单元,则调用updateLastBU(). 编码完一帧以后调用rc_update_pict_frame。接着调用rc_update_pict().调用updateRCModel(),进入updateRCModel(),调用两次RCModelEstimator()。之后调用updateMADModel。进入updateMADModel,这个时候updateMADModel函数会起作用了。它调用MADModelEstimator,更新参数之后并再次调用MADModelEstimator。 ----------------------------------------------------------------------------------------------------------------------------------- 以上是我跟踪代码所得。比较简单,但是仍希望对大家有帮助。 |
- 浏览: 315936 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (410)
- 我的开源项目 (14)
- FFMPEG (54)
- MPEG7/图像检索 (23)
- Live555 (8)
- OpenCV (9)
- 开源多媒体系统 (12)
- J2EE (12)
- RTMP (22)
- 视频质量评价 (47)
- 杂谈/非技术 (22)
- 音频编码 (11)
- 视频编码 (32)
- TinyJPEG (2)
- ffdshow (10)
- MediaInfo (8)
- ImageMagik (2)
- MPC-HC (9)
- XBMC (7)
- Mplayer (3)
- IPTV (5)
- OTT TV (4)
- 超高清/4K (4)
- 综合/IT与广电 (14)
- 网络 (21)
- DirectShow (11)
- 硬件 (5)
- 3D (2)
- 纯编程 (44)
- 开源项目 (13)
- Flash相关 (5)
- 广播电视工程 (4)
- HTML和Javascript (9)
最新评论
发表评论
-
各种视频编码器的命令行格式
2013-09-15 12:31 686各种编码器命令行工具的简单使用方式 第一行是编码,第二行是 ... -
HEVC与VP9编码效率对比
2013-09-15 20:05 804HEVC(High EfficiencyVideo Codi ... -
UHDTV(超高清电视) 的帧率规格:120fps
2013-09-20 11:44 7754K 或者说 UHDTV 和目前的 HDTV(2K、108 ... -
UHDTV (超高清电视)的色域与取样精度及格式
2013-09-20 11:55 594UHDTV 作为可能是人类最后一个电视标准,对色彩能否正确 ... -
HEVC将会取代H.264的原因
2013-09-20 12:38 429在数字视频应用产业链的快速发展中,面对视频应用不断向高清晰 ... -
HEVC码流简单分析
2013-09-20 13:03 1529初步分析了一下HEVC的码流。 使用了Elecard HE ... -
视频码流分析工具
2013-09-20 13:16 990Elecard: http://www.elecard.c ... -
H.264简单码流分析
2013-09-20 13:36 818使用Elecard Stream Eye分析了一个H.264 ... -
MPEG2简单码流分析
2013-09-20 14:03 590今天使用Elecard Stream Eye打开了一个MPE ... -
H.264专利介绍
2013-09-20 20:48 8021、H.264/AVC 是ITU与ISO联合制定的视频编码标 ... -
X264 输出的统计值的含义(X264 Stats Output)
2013-09-22 00:51 1014典型的x264输出(Stats Output)如下: av ... -
MSU 出品的 H.264 编码器比较 (2011.5)(包含VP8以及XviD)
2013-09-23 23:10 863这是著名的视频质量评价实验室MSU Graphics& ... -
MPEG4 (ISO/IEC 14496) 文档内容 简介
2013-09-24 00:16 1009ISO/IEC 14496是MPEG专家组制定的MPEG-4 ... -
视频编码标准汇总及比较
2013-09-26 00:09 750MPEG-1 类型:Audio&Video 制定 ... -
YV12,I420,YUV420P的区别
2013-10-02 14:16 2196YV12和I420的区别 一般来说,直接采集到的视频 ... -
视频编码方案之间的比较(HEVC,H.264,MPEG2等)
2013-10-02 16:38 996Jens-Rainer Ohm等人在文献《Compariso ... -
MSU 出品的 H.264 编码器比较 (2012.5)
2013-10-07 10:37 939莫斯科国立大学的MSU Graphics & Med ... -
x264编码指南——码率控制
2013-10-14 23:20 1232x264是一个 H.264/MPEG4 AVC 编码器,本指 ... -
WebM (VP8) vs H.264
2013-10-14 23:27 8052010年初 Google 收购了 On2 及其旗下的全部视 ... -
HEVC学习 —— HM的使用
2013-10-15 23:00 734从今天开始,会陆续发表HEVC学习过程中的一些总结,主要目的 ...
相关推荐
本文将详细介绍H.264(JM12.2)解码流程的理解和解码流程图。 一、H.264解码标准 H.264解码标准是由ITU-T推荐的视频编解码标准,目的是为了提高视频压缩效率和视频质量。H.264解码标准的主要特点包括: * 高效的...
jm86则是H.264编码标准的一个参考软件实现,用于帮助开发者理解和研究H.264编码技术。 jm86是由JVT(Joint Video Team)开发的一系列参考模型之一,它代表了H.264编码算法的一种具体实现。这个开源项目提供了完整的...
总结,H.264参考软件JM9.5是研究和开发H.264编码技术的重要工具,它涵盖了运动估计、块匹配算法等核心技术和完整的编码流程。通过深入研究和利用这款软件,我们可以更好地理解和优化视频编码技术,推动视频通信领域...
《H.264参考代码JM86学习版》是一个专为学习视频编解码技术设计的资源包,尤其对H.264/AVC标准的实践理解提供了宝贵的参考资料。该版本被称为“经典学习版本”,表明其在教育和研究领域具有较高的价值。 H.264/AVC...
标题中的"JM86_ccs.rar_H.264_H.264 代码_JM86"指的是一款名为JM86的编码器实现,它包含H.264编码标准的源代码。H.264,也称为AVC(Advanced Video Coding),是一种高效能的视频编码标准,广泛应用于高清视频传输、...
本文将对 H.264 JM 代码进行详细解析,回答常见的问题,并提供相关的知识点。 1. 一个 SPS 后,有若干个 PPS 吗? 在 H.264 JM 代码中,一个 SPS(Sequence Parameter Set)后可以有多个 PPS(Picture Parameter ...
JM是H.264标准的一个参考实现,由JVT(联合视频团队)开发,它提供了对H.264编码算法的详细实现,是理解和研究H.264的宝贵资源。 阅读笔记之一.doc,可能是作者在分析JM源代码过程中的详细记录,包含了对关键算法的...
《深入解析H.264编码技术:以JM86经典版本为例》 H.264,全称为Advanced Video Coding(高级视频编码),是一种在数字视频编码领域广泛应用的国际标准,由ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(动态图像...
本篇将详细介绍H264 JM代码和工具,以及它们如何帮助我们深入理解H.264编解码的发展和改进。 一、H264编码标准概述 H.264,全称为ITU-T的G.729 Annex D和ISO/IEC的14496-10,是一个联合视频编码标准,由多个组织...
描述中提到的“H.264官方测试软件JM14.2”,意味着这是一个官方发布的、用于测试和评估H.264编码算法的工具。这个版本可能包含了当时最新的编码优化和改进,对于学习和研究H.264编码技术具有很高的参考价值。通过...
第4章和第5章是《深入理解视频编解码技术:基于H.264标准及参考模型》的精华内容,介绍了H.264的参考软件并用大量篇幅分析了JM8.6版本的代码,使读者能更快地掌握H.264的核心内容;第6章是H.264的DSP移植与优化;第7...
JM(Joint Model)是H.264标准的官方参考软件,由VCEG和MPEG联合开发,用于验证标准的实现和性能。JM17.0是其中的一个版本,包含了完整的编码和解码功能,对于学习H.264编码原理非常有帮助。 1. 架构概览 JM17.0...
《深入理解H.264编码解码:以JM8.6测试软件为例》 H.264,全称为Advanced Video Coding(高级视频编码),是目前广泛应用的视频编码标准,广泛应用于高清视频、网络流媒体、蓝光光盘等领域。它的高效编码能力使得在...
JM12.4是H.264参考软件的一个版本,它包含了完整的编码和解码流程,可供研究人员和开发者进行实验和分析。这个版本可能包含了一些优化和改进,比如错误恢复机制、多视图编码支持、高分辨率视频处理等。开发者可以...
H.264参考软件最新版本16.1,支持VC++7.0,VC++8.0 Changes in Version JM 16.1 (since JM 16.0) ------------------------------------------ - encoder: check slice group parameter size for slice_group_map_...
详细说明:h.264标准代码,用于视频编码!可以实现各种视频的编码和解码,可以在这个代码的基础上进行各种开发,比如算法的优化,转码技术,实现各种分辨了的转码-h.264 standard code, uses in the video frequency...
JM18.3是H.264编码器的一个具体实现版本,它代表了该编码技术在某个时间点的最优性能和最新发展。 H.264的编码技术基于多个关键特性,包括: 1. **块划分**:视频帧被分割成不同大小的宏块,以便于处理和编码。JM...
8. **软件文档**:随附的软件说明文档将详细解释模型的工作原理,帮助开发者理解和调试代码,这对于理解H.264标准的实施细节非常有价值。 在使用H.264 JM测试模型时,你需要熟悉C++编程,并且可能需要了解一些视频...
总之,H.264的JM 18.4参考软件是学习和实践视频编码技术的关键资源,它集成了H.264标准的多项创新技术,通过源代码分析,我们可以深入了解视频压缩的全过程,为开发高效、高质量的视频应用提供强大支持。
对于开发者和研究人员来说,通过分析和修改JM86源代码,可以深入了解H.264的内部工作机制,并为自定义编码器或者优化现有编码器提供参考。 在使用JM86时,初学者可能会遇到一些挑战,例如理解复杂的命令行参数、...