网站开发毕设ppt做电力项目信息的网站

张小明 2026/1/9 8:38:18
网站开发毕设ppt,做电力项目信息的网站,企业展厅设计图片,seo百科文章目录FrameQueue 使用环形缓冲区的原因背景需求环形缓冲区优势FrameQueue vs 普通队列#xff1a;核心差异keep_last 机制详解设计目的核心字段含义关键函数#xff1a;frame_queue_peek()关键函数#xff1a;frame_queue_next()运行示例#xff08;视频队列#xff0c…文章目录FrameQueue 使用环形缓冲区的原因背景需求环形缓冲区优势FrameQueue vs 普通队列核心差异keep_last 机制详解设计目的核心字段含义关键函数frame_queue_peek()关键函数frame_queue_next()运行示例视频队列max_size3, keep_last1frame_queue_nb_remaining() 如何计算keep_last 总结FrameQueue 使用环形缓冲区的原因背景需求视频播放中解码线程持续向队列写入帧生产者渲染线程从队列读取帧用于显示消费者。需要支持保留当前显示帧、预读下一帧用于计算显示间隔、插帧等、暂停时画面不消失、低延迟和高性能。普通动态队列如链表频繁 malloc/free 会带来性能开销和内存碎片不适合实时音视频场景。环形缓冲区优势ffplay 的 FrameQueue 是一个固定大小的数组 读写指针结构typedefstructFrameQueue{AVFrame*queue[MAX_FRAME_QUEUE_SIZE];// 固定数组提前分配intrindex;// 读指针逻辑上指向“已读但未释放”的帧intwindex;// 写指针intsize;// 当前有效帧数intmax_size;// 最大容量通常 audio9, video3, sub16intkeep_last;// 是否保留最后一帧intrindex_shown;// 标记当前 rindex 帧是否已被“显示过”SDL_mutex*mutex;SDL_cond*cond;}FrameQueue;优点总结内存一次性分配无碎片指针通过 % max_size 循环使用O(1) 读写支持“只读不删”peek、“延迟删除”nextFrameQueue vs 普通队列核心差异特性普通队列如 std::queueffplay FrameQueue出队行为pop() 立即释放内存frame_queue_next() 才真正释放读操作front() 后必须 pop可多次 peek() 查看当前/下一帧最后一帧出队即销毁若 keep_last1即使出队也保留用途通用数据传输音视频渲染专用需保留历史帧关键区别“读” ≠ “消费”。FrameQueue 允许“查看但不移除”这是实现流畅渲染的基础。keep_last 机制详解设计目的暂停时保持画面不能因为“已显示”就立刻释放帧计算帧间隔需要 lastvp上一帧和 vp当前帧的 PTS 差值防止黑屏在新帧未到达前继续显示旧帧核心字段含义intrindex;// 指向“逻辑上最后一个保留的帧”通常是 lastvpintrindex_shown;// 0 表示 rindex 帧尚未作为“当前帧”显示过// 1 表示 rindex 帧已是“上一帧”当前帧是 (rindex1)%sizeintkeep_last;// 1 表示启用保留机制video/subtitle 启用audio 不启用关键函数frame_queue_peek()// 获取当前应显示的帧不移动指针staticinlineFrame*frame_queue_peek(FrameQueue*q){returnq-queue[(q-rindexq-rindex_shown)%q-max_size];}若 rindex_shown0 → 返回 rindex 帧即 lastvp也是当前帧若 rindex_shown1 → 返回 (rindex1) 帧当前帧而 rindex 是 lastvp关键函数frame_queue_next()staticinlinevoidframe_queue_next(FrameQueue*q){if(q-keep_last!q-rindex_shown){// 第一次调用 next()仅标记 rindex_shown1不移动 rindexq-rindex_shown1;return;}// 真正释放 rindex 帧并移动指针av_frame_unref(q-queue[q-rindex]);q-rindex(q-rindex1)%q-max_size;q-rindex_shown0;// 新的 rindex 尚未作为“当前帧”显示q-size--;SDL_CondSignal(q-cond);}运行示例视频队列max_size3, keep_last1假设解码线程写入了 3 帧F0, F1, F2初始状态刚写完queue [F0, F1, F2] windex 0循环回绕 rindex 0 rindex_shown 0 size 3第一次渲染显示 F0frame_queue_peek() → 返回 queue[(00)%3] F0显示 F0调用 frame_queue_next()因为 keep_last1 rindex_shown0 → 仅设 rindex_shown1rindex 仍为 0F0 未被释放此时rindex 0 (F0 保留为 lastvp) rindex_shown 1 → 当前帧是 (01)F1 size 3未减少第二次渲染显示 F1frame_queue_peek() → 返回 queue[(01)%3] F1显示 F1调用 frame_queue_next()现在 rindex_shown1 → 执行真实出队av_frame_unref(F0) → 释放 F0rindex (01)%3 1rindex_shown 0size 2此时queue [__, F1, F2] F0 已释放 rindex 1 → 指向 F1作为新的 lastvp rindex_shown 0 → 当前帧仍是 F1下一次 peek 还是 F1注意F1 被“保留”了两次——第一次作为“当前帧”显示第二次作为“lastvp”供下次同步参考。frame_queue_nb_remaining() 如何计算staticintframe_queue_nb_remaining(FrameQueue*q){returnq-size-q-rindex_shown;}size队列中总帧数包括保留的 lastvprindex_shown若为 1说明 lastvp 已“转正”为历史帧当前帧是下一个因此可显示的帧数 size - 1若为 0说明当前帧就是 rindex所有 size 帧都可用示例size3, rindex_shown1 → 可显示帧数 2当前帧 下一帧size1, rindex_shown0 → 可显示帧数 1只有当前帧这对 video_refresh 判断是否该丢帧或等待至关重要。keep_last 总结场景作用暂停播放保留 lastvp画面不黑计算帧率lastvp.pts 与 vp.pts 做差音视频同步视频时钟基于 lastvp 更新低内存占用固定 3 帧缓存避免堆积流畅渲染支持“显示当前帧 预读下一帧”
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

国外直播做游戏视频网站有哪些网站备案前置审批 成都

作为企业级私有云存储平台,Nextcloud的Docker镜像升级过程需要严谨的风险控制策略。许多用户在升级过程中由于操作不当导致数据丢失或服务中断,本文将为您提供一套完整的四阶段升级方案,确保升级过程零风险。 【免费下载链接】docker ⛴ Dock…

张小明 2026/1/8 18:12:39 网站建设

汕头模板开发建站做网站开发的步骤

YOLOv8多GPU并行训练配置指南 在当前计算机视觉技术高速发展的背景下,目标检测作为核心任务之一,已广泛应用于自动驾驶、智能监控和工业质检等关键领域。其中,YOLO(You Only Look Once)系列凭借其“单阶段、端到端”的…

张小明 2026/1/7 20:26:18 网站建设

1688的网站特色dwcc网页制作教程

黑苹果EFI一键生成神器:OpCore智能配置完整指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果复杂的配置流程而烦恼吗&…

张小明 2026/1/7 20:26:21 网站建设

宁波网站推广优化公司电话威海网站推广

文章目录 前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S 四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论 五、项目代码参考六、数据库代码参考七、项目论文示例结语 前言 💛博主介绍&a…

张小明 2026/1/9 8:11:03 网站建设

提供哈尔滨网站建设服务八里河风景区网站建设内容摘要

Intel RealSense SDK是一个功能强大的深度感知开发工具包,它让多相机系统的搭建和三维重建变得前所未有的简单。无论你是初学者还是有一定经验的用户,通过本文的完整教程,你将能够快速构建自己的多相机三维扫描系统。 【免费下载链接】librea…

张小明 2026/1/7 20:31:05 网站建设