glide加载mp4 源码堆栈调用核心代码分析

load 数据走的httpurlfetcher 的loaddata 从MultiLoader 调用而来

load到inputstream流后的处理 核心

图片是glide 首先创建解释器的时候 加了videodecoder 然后这里会从流中加载对应帧的图片保存在手机cache目录中 将这个file 作为bitmap传递 然后加载 

  private static final class ByteBufferFetcher implements DataFetcher<ByteBuffer> {private final File file;@Synthetic@SuppressWarnings("WeakerAccess")ByteBufferFetcher(File file) {this.file = file;}

几个核心的类 VideoDecoder

public interface VideoDecoder {/** Settings passed to the decoder by WebRTC. */public class Settings {public final int numberOfCores;public final int width;public final int height;@CalledByNative("Settings")public Settings(int numberOfCores, int width, int height) {this.numberOfCores = numberOfCores;this.width = width;this.height = height;}}/** Additional info for decoding. */public class DecodeInfo {public final boolean isMissingFrames;public final long renderTimeMs;public DecodeInfo(boolean isMissingFrames, long renderTimeMs) {this.isMissingFrames = isMissingFrames;this.renderTimeMs = renderTimeMs;}}public interface Callback {/*** Call to return a decoded frame. Can be called on any thread.** @param frame Decoded frame* @param decodeTimeMs Time it took to decode the frame in milliseconds or null if not available* @param qp QP value of the decoded frame or null if not available*/void onDecodedFrame(VideoFrame frame, Integer decodeTimeMs, Integer qp);}

以及VideoBitmapDecoder

@Deprecated
public class VideoBitmapDecoder extends VideoDecoder<ParcelFileDescriptor> {@SuppressWarnings("unused")public VideoBitmapDecoder(Context context) {this(Glide.get(context).getBitmapPool());}// Public API@SuppressWarnings("WeakerAccess")public VideoBitmapDecoder(BitmapPool bitmapPool) {super(bitmapPool, new ParcelFileDescriptorInitializer());}
}

以上就是 video加载核心部分的分析 在VideoDecoder::decode()  以及 加上断点就可以很清楚的分析出load到图片以后的transform过程

第二部分 网络请求部分 以及自定义headers token等 modelfactory

在 加断点 

他是从这里调用过来的MultiModelLoader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL物理备份与恢复工具XtraBackend使用总结

文章目录 1.描述2.安装3.使用3.1 备份源数据库3.2 恢复到目标数据库3.2.1 恢复目录3.2.2 解压文件3.2.3 应用日志3.2.4 复制数据 4.使用总结4.1 备份4.2 恢复4.3 例子 1.描述 借助Percona XtraBackup工具实现MySQL的物理备份与恢复&#xff0c;相当于将整个MySQL进行了复制&am…

Django+vue自动化测试平台(25)-- 自动化测试之封装APscheduler定时任务框架

APscheduler简介 APscheduler全称Advanced Python Scheduler&#xff0c;作用为在指定的时间规则执行指定的作业&#xff0c;其是基于Quartz的一个Python定时任务框架&#xff0c;实现了Quartz的所有功能&#xff0c;使用起来十分方便。提供了基于日期、固定时间间隔以及cront…

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片 1 目标效果视频 CamManager 2 CamManager读取本地文件时序 3 BD_Vision_Utility添加代码 3.0 导入链接库 BD_OperatorSets.dllSystem.Windows.Forms.dllOpencvSharp 3.1 导入VisionParam中创建的文件Util_FileO…

安防监控/视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是什么原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

旅游计划定制小程序网页模板源码

手机在线旅游定制服务&#xff0c;定制旅游出行app小程序模板。包含&#xff1a;定制介绍、定制表单填写、我的订单等。 旅游计划定制小程序网页模板源码

C++ STL 文件系统用法介绍

目录 一. 获取当前工作目录 二:设置和读取文件写入时间 三:获取文件目录大小 四:获取文件类型信息 一. 获取当前工作目录 #include <filesystem> #include <iostream> #include <fstream> namespace fs = std::filesystem;int main() {std::cout &l…

交换机接口三种模式Access、Trunk、Hybrid

交换机接口的三种模式 1.access接口模式&#xff08;接入链路&#xff0c;接入模式&#xff09; 接收数据&#xff1a;当接收到一个无标记帧的时候&#xff0c;打上自己的PVid并接受&#xff08;就是自己的vlan标签&#xff09;。当接收到一个有标记帧的时候&#xff0c;对比…

swiftui中NavigationStack布局navigationBarTitleDisplayMode作用,以及内容顶部空白区域解决办法

写了一个小demo用于学习NavigationStack和toolbar/ToolbarItem知识&#xff0c;但是在写一个瀑布流布局的时候&#xff0c;设置了顶部的toolbar&#xff0c;然后内容区域的顶部出现了一大片空白区域&#xff0c;这样的效果并不是很美观很好看&#xff0c;所以就想着研究解决一下…

科普文:一文搞懂SpringBoot(狂神说Java)

1、Hello,World&#xff01; 1.1、SpringBoot简介 回顾什么是Spring Spring是一个开源框架&#xff0c;2003 年兴起的一个轻量级的Java 开发框架&#xff0c;作者&#xff1a;Rod Johnson 。 Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发。 Spring是…

clickhouse学习笔记(五)SQL操作

目录 一、增 二、删改 三、查询以及各种子句 1、with子句 a、表达式为常量 b、表达式为函数调用 c、表达式为子查询 2、from子句 3、array join子句 a、INNER ARRAY JOIN b、LEFT ARRAY JOIN c、数组的一些函数 groupArray groupUniqArray arrayFlatten splitBy…

Java 如何在volatile内部调用接口

在Java中&#xff0c;volatile 关键字通常用于确保变量的可见性和有序性&#xff0c;而不是用来修饰接口或方法调用的。volatile 修饰的变量会被立即同步到主存&#xff0c;并且在每次访问时都会从主存中重新读取&#xff0c;而不是从缓存中读取。这意味着对volatile变量的修改…

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(无缺失)

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2005-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、范围&#xff1a;31省 4、指标&#xff1a;全体居民人均消费支出、城镇居…

探索 Linux 的 /etc/hosts 文件:基础知识与实用指南

探索 Linux 的 /etc/hosts 文件&#xff1a;基础知识与实用指南 在 Linux 和 Unix 系统中&#xff0c;/etc/hosts 文件扮演着一个至关重要的角色。它是系统的本地 DNS&#xff08;域名系统&#xff09;解析器&#xff0c;负责将主机名映射到 IP 地址。在网络和系统管理中&…

Linux中软件yum安装与编译安装

yum安装与编译安装是Linux系统中常见的两种软件安装方式&#xff0c;它们在多个方面存在显著的区别。以下是对这两种安装方式的详细比较&#xff1a; yum安装 定义与特点&#xff1a; 定义&#xff1a;YUM&#xff08;Yellow dog Updater, Modified&#xff09;是Linux类系统…

Windows netstat命令详解,Windows查看网络连接

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 netstat 常用来…

rocketmq实现限流

目录 问题背景 技术方向 方案确认 消息队列&#xff08;√&#xff09; 分布式锁&#xff08;&#xff09; 方案实现 监控方向 业务方向 问题背景 公司邮件服务token有 分钟内超200封的熔断机制&#xff0c;当前token被熔断后&#xff0c;系统发邮件操作会被忽略&…

python中的原子操作简介

深入理解Python中的原子操作 在现代编程中&#xff0c;多线程是提高程序执行效率的常用技术。然而&#xff0c;当多个线程并发执行时&#xff0c;如何确保数据的一致性和操作的正确性成为了一个关键问题。原子操作&#xff08;Atomic Operation&#xff09;便是解决这一问题的…

责任链模式(大话设计模式)C/C++版本

责任链模式 C #include <iostream> #include <memory>using namespace std; // 请求类 struct Request {std::string requestType; // 请求类型int number; // 该请求类型的数量std::string requestContent; // 请求内容 };// 抽象经理类 clas…

MySQL学习记录 —— 십칠 CentOS7.9环境下的MySQL8.4 安装和配置

文章目录 1、安装和配置2、MySQL 包位置3、主要程序介绍 本篇开始在之前mysql博客的基础上继续延伸&#xff0c;适合有一定基础的mysql使用者阅读 环境 &#xff1a;CentOS 7.9 root 用户&#xff0c;MySQL 8.4 1、安装和配置 看一下当前系统版本 cat /etc/redhat-release应当…

前端重点之:Vue+websocket通信详细用法和websocket心跳机制的使用,websocket断开实时监测,websocket实时通信

今年年初找工作,好多gou面试官总喜欢问关于websocket通信的使用方式,此次又用到了,在此做个总结:主要包含websocket的具体使用方法,和重点:(心跳机制的使用),就是主要是前端实时监测websocket是否有断连和数据的处理 在前端开发中,WebSocket 是一种常见的技术,用于…