- 博客(430)
- 收藏
- 关注
原创 SVT-AV1学习-函数selfguided_restoration_fast_internal
selfguided_resration_fast_internal 是SVT-AV1编码器中用于自引导恢复的一个关键组件,通过自引导滤波技术对输入的去燥图像数据进行处理,生成一个去燥版本的图像,用于进一步的图像恢复和优化,该函数的参数设计使其能够灵活的适应不同的图像处理需求。参数控制 通过sgr_params_idx个radius_idx参数,可以灵活的选择不同的去燥强度和方式,以适应不同图像的处理需求。去燥 该函数的主要作用是通过自引导滤波技术对输入图像进行去燥处理,生成一个去燥版本的图像。
2025-04-08 14:45:33
409
原创 SVT-AV1学习-svt_aom_get_sg_filter_level,svt_av1_selfguided_restoration_c
(如ENC_MO,ENC_M3等, 通常表示编码复杂度,数值越小模式越低)svt_av1_selfguided_restoration_c函数注释。INPUT_SIZE_360p_RANGE等)(如INPUT_SIZE_8k_RANGE,定义了垂直和水平方向的扩展宽度。二 sg filter详解。
2025-04-07 18:45:37
765
原创 SVT-AV1学习--compute_subpel_params函数
总结 compute_subpel_params 函数在视频变啊吗中扮演着重要角色,通过计算呀像素精度的运动补偿参数,提高了编码效率和视频质量。1 亚像素精度运动补偿,在视频编码中,运动估计通常在整像素级别进行,但是为了获得更高的编码效率,需要进行呀像素精度的运动补偿,该函数通过计算亚像素参数,使得运动补偿能够在亚像素级别进行,从而提高编码质量。2 计算亚像素位置 根据输入的运动矢量和块的位置,计算出亚像素级别的位置坐标。
2025-04-07 09:56:57
658
原创 SVT-AV1学习--update_cdf函数
这个函数updatecdf时一个用于更新累积分布函数CDF的函数通常在概率模型中使用比如在视频编码或压缩算法中。它的作用时根据当前符号的值val更新CDF数组cdf以反映符号出现的概率变化以下时每一行代码的解释和注释staticINLINEvoidupdatecdfint32trate;更新速率。
2025-04-02 00:48:37
412
原创 深度学习--softmax回归
{婴儿,儿童,青少年,中年人,老年人}3.4.3 全链路层的参数开销。3.4.1 分类问题。3.4.2 网络架构。
2025-04-02 00:11:38
361
原创 SVTAV1函数分析-svt_av1_cost_coeffs_txb
这是End of block的缩写,表示块中最后一个非零系数的位置,在视频编码中,特别是在变换和量化之后, 块中的许多系数可能变为零,EOB值可以额帮助快速定位到最后一个非零系数,从而提高编码效率。这个参数可能与变换块跳过(Transform Block Skip)的上下文有关,某些情况下,如果块中的系数非常稀疏或者满足某些条件,可以跳过变换和量化过程,以计生计算资源和编码时间。这是一个布尔标志,用于指示是否使用简化的变换集,在某些编码配置下,为了减少计算复杂度,可能会限制可用的变换类型。
2025-03-29 22:07:43
596
原创 SVTAV1热点函数-svt_ext_all_sad_calculation_8x8_16x16_avx2
/ 对sad16x16_16中的每个16位元素,找到最小值及其位置索引,存储到minpos16x16中。// 再次计算ref02和src0123之间的SAD值,模式为101 101,并累加到sad02中。// 再次计算ref13和src0123之间的SAD值,模式为111 111,并累加到sad13中。// 再次计算ref02和src0123之间的SAD值,模式为101 101,并累加到sad02中。// 再次计算ref13和src0123之间的SAD值,模式为111 111,并累加到sad13中。
2025-03-27 22:25:10
936
原创 LLVM学习-DragonEgg工具
222使用DragonEgg和LLVM工具了解编译流程如果希望看到前端的运行情况请使用Sfpluginargdragoneggemitir标志该标志将产生以LLVMIR代码表示的人工可读文件。一旦编译器将程序转换为IR则停止编译并将内存中的表示内容写入磁盘的能力是LLVM的一个独有特征。大多数其他编译器无法做到这一点在。
2025-03-26 23:13:01
828
原创 LLVM学习--Compiler-RT
例如,32位目标通常缺少支持64位除法的指令,CompilerRT通过提供特定于目标并经过优化的功能来解决这个问题,该功能在使用32位指令的同时实现了64位除法,提供相同的功能,因此是LLVM项目中libgcc的替代品,此外,还具有对地址内存清洗工具的运行时支持,你可以从。如果你仍然没有这个组件,记住将其源代码放入LLVM源代码树中的projects 文件夹内,如下命令序列所示。要查看编译器运行时库启动时的典型情况,可以编写一个执行64位除法的C程序来做一个简单的实验。
2025-03-26 10:17:38
707
原创 深度学习--随机变量
(如果呈阳性,则为1,如果呈阴性,则为0)(如果呈阳性,则为1,如果呈阴性,则为0)(如果呈阳性,则为1,如果呈阳性,则为0)
2025-03-23 08:54:42
331
原创 深度学习--概率
1.1 假设我们掷骰子,想知道1而不是看到另一个数字的概率,如果骰子是公司,那么所有6个结果(1..6),都有相同的可能发生,因此,我们可以说1发生的概率为1/6.然而现实生活中,对于我们从工厂收到的真实骰子,我们需要检查它是否有瑕疵,
2025-03-22 23:42:10
468
原创 深度学习--链式法则
可以链接一个多元函数对其所有变量的偏导数的方式来计算梯度。偏导计算示例设函数zfx,y)3x2y2xy2求z对x和y的偏导数对x求偏导数把y看作事常熟对x求导数3x2xy2y2对y求偏导数3x22xx3y2244链式法则用上吗的方法可能很难找到梯度因为在深度学习中多元函数通常是复合的所以。
2025-03-21 00:38:55
528
原创 LLVM学习-- 构建和安装
例如,从版本3.3到版本3.4的更新时次要版本更新,一旦次要号码达到9,下一个版本号就会在主版本号加1,就像LLVM 2.9之后更新的LLVM 3.0, 与其前任版本相比,主要修订版本的更新不一定会产生很大的变化,但是与上一个主要版本相比,这个主要版本更新一般代表近5年来编译器的发展过程。依赖于LLVM的项目通常使用其Trunk 主干版本,即SVN存储库汇总最新可用的版本,然而使用这个版本的代价在于这个版本可能不稳定,最近,从版本3.4开始,LLVM社区致力于修正发布,引入新的修订版本号。
2025-03-18 22:46:11
773
原创 hevc编码芯片设计-数据重用
因此,Zhou等将搜索窗设置为水平+-211 垂直 +-106的菱形,适用于动态较大的视频场景,首先以菱形方式粗搜,而后以全搜索方式进一步精搜,但是,这种复杂的搜索模式会导致非常大的的仿存带宽。Kim等首先分析了 不同尺寸分块的最佳运动矢量分布,发现大块的运动矢量与其下小块的运动矢量的大小非常相似,因此该方案只对尺寸小于或者等于16x16的块做运动估计,而对尺寸大于16x16的块直接取左上角16x16块的MV作为其最佳MV。Hu等同样采用了两步搜索方案。因此,该方案可以减少搜索点数目,大幅缩短搜索时间。
2025-03-16 08:41:05
440
原创 hevc视频编码-搜索窗口和快速搜索
因此,第四步的搜索步长是逐步收敛的,从先前的最优步长逐步递减到1(同样以2的指数递减。BD-Rate 是衡量图像编码效率的评判标准,表征的是在相同PSNR 图像质量下,不同编码方法之间的BitRate 的情况,以下实验基于HEVC测试视频系列,在HM 平台完成,采用帧间搜索的默认设置,但仅采用1帧参考帧。搜索的开始先判断第二步 得到的最佳匹配位置与搜索中心之间的距离,若该距离为0,则直接跳过这一步的搜索过程;若该距离比预设值iRaster 要大,则要进行一次以iRaster为步长的光栅搜索,即全搜索;
2025-03-15 23:45:05
303
原创 linux内核mmap映射区域
当用户使用malloc申请大于128KB的堆内存时内存分配器会通过mmap系统调用在linux进程虚拟空间中直接映射一片内存给用户使用这片使用mmap映射的内存区域比较神秘。当我们运行一个程序时需要从磁盘上将该可执行文件加载到内存。将文件加载到内存有两种常用的操作方法一种是通过常规的文件IO操作如readwrite等系统。
2025-03-15 08:29:06
411
原创 SVT-AV1源码分析函数 svt_av1_cost_coeffs_txb
/更新基础CDF update_cdf(ec_ctx->coeff_base_cdf[txs_ctx][plane_type][coeff_ctx], AOMMIN(level, 3), 4);//定义存储系数级别的缓冲区。int16_t txb_skip_ctx, //变换块是否跳过上下文索引,用于熵编码概率模型的选择。
2025-03-12 16:27:53
812
原创 SVT-AV1源码分析函数 svt_av1_optimize_b
1.1 量化处理,根据量化参数对输入的变换系数进行量化,得到量化后的系数存储在qcoeff_ptr中,量化过程会会根据picture_qp, delta_q_present 等参数调整量化步长,以控制编码后的比特率质量。2 去量化处理,对量化后的系数进行去量化,得到去量化后的系数存储在dqcoeff_ptr中,,反量化后的系数用于后续的重建过程,以生成预测块。
2025-03-12 00:12:51
727
原创 SVT-AV1源码分析build_intra_predictors函数
build_intra_predictors函数作用。:指向宏块解码结构体的指针,包含当前宏块的解码信息。三 考虑多种因素进行预测。(如角度预测模式等)
2025-03-10 23:45:12
517
原创 SVT-AV1帧内编码
svt_av1_predict_intra_block_16bit 16bits深度帧内预测编码。svt_av1_intra_prediction_cl 帧内预测chroma luma。svt_av1_predict_intra_block 帧内块预测编码。seq_header_ptr->sb_size, // 超级块尺寸。row_off, col_off, // 变换块偏移。mi_row, mi_col, // 宏块位置。
2025-02-28 18:36:33
568
原创 SVT-AV1接入ffmpeg说明
1 << pack_mode_10bit 如果pack_mode_10bit 为1,则乘以2,否则乘以1,这用语计算10位编码时的额外数据大小。//如果同时支持8位和10位编码,则两者的大小相加。
2025-02-25 18:42:05
839
转载 WebRTC拥塞控制算法--GCC介绍
网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题,对网络传输的质量有严重的影响,网络拥塞是导致吞吐降低,网络丢包等的主要原因之一,这些问题使得上层应用无法有效的利用网络带宽获得高质量的网络传输效果。特别是在通信领域,网络拥塞导致的丢包,延迟,抖动等问题,严重的影响了通信质量,如果不能很好的解决这些问题,一个通信产品就无法在现实环境中正常使用。
2025-01-09 11:57:52
63
原创 libaom 源码分析线程结构
/设置宏块解码器上下文的错误信息。三 libaom 线程调用关系。一 libaom线程启动函数。二 libaom线程调用栈。
2025-01-03 16:04:30
728
原创 libaom threads线程配置
/ 这一步是取 (超级块列数 + 1) 右移一位 和 超级块行数 中的较小值。// 计算当前瓦片可用于行多线程的线程数,并累加到总线程数中。// 获取当前瓦片中超级块(super block)的行数。// 返回总线程数和最大线程数中的较小值。// 计算编码阶段行多线程的工作线程数。// 初始化行多线程的总线程数为0。// 获取当前瓦片中超级块的列数。// 获取视频帧中瓦片的列数。// 获取视频帧中瓦片的行数。// 初始化当前瓦片的信息。// 遍历每一行瓦片。// 遍历每一列瓦片。
2024-12-31 18:22:12
806
原创 libaom参数分析cpu-used
这段代码将一个名为`oxcf`的结构体中的`speed`成员的值赋给另一个名为`frame_params`的结构体中的`speed`成员。`:这行代码将`oxcf`结构体中的`speed`成员的值赋给`frame_params`结构体中的`speed`成员。这段代码是C语言的一部分,注释和代码结合起来说明了`frame_params.speed`变量的设置。- `// Per-frame encode speed.`:这行注释说明`speed`参数是针对每一帧编码的速度。二 代码review。
2024-12-31 16:39:42
334
原创 CPU性能优化--后端优化
该图展示了内存和处理器的性能差距,纵轴以对数刻度显示了CPU和DRAM性能差距的增长趋势,内存基线时从1980年的64KB DRAM芯片的内存访问延迟开始的。解决此类性能问题的第一步是,定位导致高内存绑定 指标的内存访问,识别出导致问题的具体内存访问后,就可以通过集中策略来进行优化,下面,我们将讨论几个典型的案例。当应用程序执行大量的内存访问并且花比较长的时间等待内存访问完成时,那么该应用程序会被表征为内存绑定。需要强调的是,只有在TMA显示高 后端绑定指标时,才需要考虑针对CPU后端进行代码优化。
2024-12-25 22:42:13
750
原创 CPU性能优化--函数分组
热点函数可以被分组到一起以进一步提升CPU前端缓存的利用率当热点函数被分组在一起时候他们可能会共用相同的缓存行这会减少CPU需要读取的缓存行数量。图44给出了被分组函数foobar和zoo的图形化展示。默认布局需要读取四个缓存行而在优化布局中函数foobar和zoo的代码只需要三个缓存行。此外当我们从foo调用zoo时zoo的开始部分已经在指令。
2024-12-21 11:32:23
923
原创 CPU性能优化--前端优化
可以使用-mllvm-align-all-blocks编译选项,然而,该选项使用要小心,可能导致性能劣化,插入会被执行到的NOP指令,增加程序开销,尤其当它们在关键路径上时,NOP指令不需要被执行,但是,他们仍然需要被从内存读取,解码和退休。图42b中用深色阴影区的NOP指令展示这样做的效果,注意,由于基准测试值运行了热点循环,因此可以确定两个缓存行都会驻留在L1指令缓存中,图42b中布局性能更好的原因并不容易解释清楚,涉及相当多的微架构内容,我们本书中不会讨论这些细节。编译器会生成如下的汇编代码。
2024-12-21 08:05:26
534
原创 CPU性能优化-基于源代码的CPU调优
一在第二部分我们将讨论如何使用CPU监控特性寻找CPU上运行的代码中可被调优的位置。对于性能敏感型应用程序如大型分布式云服务科学高性能计算软件3A级游戏等了解底层硬件的工作原理是非常重要的。若在程序开发对没有关注硬件那么从一开始就注定会失败。标准的算法和数据结构在性能敏感型负载上并不总能表现得很好。传统链表的每个节点都是动态分配。
2024-12-20 01:31:03
723
原创 CPU性能优化-磁盘空间和解析时间
即使考虑了跟踪文件的压缩格式编码后的数据仍然会占用很大的磁盘空间。通常每条指令不超过1字节但是考虑到CPU执行指令的速度数据仍然非常多。根据负载CPU编码以100MBs的速度处理PT跟踪文件的情况是很常见的解析后的数据可能增加10倍多(约1GB/s)。这使得PT工具并不适用于长时间运行的负载但是即使是大负载程序也可以用PT运行一小段时间。
2024-12-20 01:09:19
844
原创 SRT源码分析--接收buffer源码分析
在多线程环境中,`buffer_rcv.cpp` 文件中的代码需要确保线程安全,特别是在修改缓冲区状态时,如 `m_iStartPos`、`m_iLastAckPos` 和 `m_iMaxPosOff` 等成员变量。它在构造时创建一个 `stringstream` 对象 `ss`,在析构时将 `ss` 中的内容输出到日志。`isInRange` 函数检查一个给定的位置 `iFirstNonreadPos` 是否在由 `iStartPos` 和 `iMaxPosOff` 定义的范围内。否则,它将被优化掉。
2024-12-16 18:56:11
600
原创 SRT协议学习
在实际应用中,数据包可能包含更多的头部信息,如源地址、目的地址、扩展头部等,并且数据负载部分会根据实际传输的数据进行变化。控制数据包又包含了握手(Handshake)、肯定应答(ACK)、否定应答(NAK)、对肯定应答的应答(ACKACK),保持连接(Keepalive)、关闭连接(Shutdown)等多种类型。SRT数据包的首部长度为16字节,最高位为标志位,0代表信息数据包,1代表控制数据包。(2字节):标志位,包含多种控制位,如是否是最后一个数据包、是否加密等。
2024-12-13 19:22:22
505
原创 SRT源码分析--CChanel分析
/ 定义 addrinfo 结构体指针,用于存储 getaddrinfo 函数的返回结果。// 定义 addrinfo 结构体,用于指定 getaddrinfo 函数的搜索条件。// Windows 下 ai_addrlen 类型为 size_t(无符号),而 bind 函数需要 int 类型。// 定义 addrinfo 结构体指针,用于存储 getaddrinfo 函数的返回结果。// 定义 addrinfo 结构体,用于指定 getaddrinfo 函数的搜索条件。
2024-12-13 18:19:03
697
1
原创 SRT Channel 源码分析
/ 定义一个名为 set_cloexec 的静态函数,它接受两个整型参数:文件描述符 fd 和一个布尔值 set。// FIOCLEX:设置文件描述符为 close-on-exec,即在 exec 调用后关闭该文件描述符。// 基于现有的 UDP socket 描述符打开一个 UDP 通道。// 打开一个 UDP 通道,使用提供的本地地址。// 模板函数,用于获取 socket 选项的值。// 查询通道连接的对端 socket 地址。// 查询通道使用的 socket 地址。
2024-12-13 16:58:29
504
原创 CPU性能优化--基于处理器事件的采样
基于处理器事件的采样processor event based sampling PEBS 是CPU的另一种非常有用的特性,PEBS被用来在每个采样点获取更多的补充数据。这些补充数据有定义好的格式,为PEBS配置性能计数器之后,处理器会保存PEBS缓冲区的内容,并将之转存到内存中。记录的信息包括处理器的架构状态,例如,通用的寄存器,EAX, EBX, ESP等,指令指针寄存器EIP和标志寄存器EFLAGS 等的状态,字节偏移 字段 字节偏移 字段。linux perf工具没像。6.3.3 分析内存访问。
2024-12-12 09:47:33
688
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人