当前位置: 首页 > news >正文

Android 13 - Media框架(24)- MediaCodecList

这一节我们要了解 MediaCodecList 中的信息是如何加载的,以及这些信息是如何使用到的。

// static
sp<IMediaCodecList> MediaCodecList::getLocalInstance() {Mutex::Autolock autoLock(sInitMutex);if (sCodecList == nullptr) {MediaCodecList *codecList = new MediaCodecList(GetBuilders());if (codecList->initCheck() == OK) {sCodecList = codecList;if (isProfilingNeeded()) {ALOGV("Codec profiling needed, will be run in separated thread.");pthread_t profiler;if (pthread_create(&profiler, nullptr, profilerThreadWrapper, nullptr) != 0) {ALOGW("Failed to create thread for codec profiling.");}}} else {// failure to initialize may be temporary. retry on next call.delete codecList;}}return sCodecList;
}sp<IMediaCodecList> MediaCodecList::sRemoteList;sp<MediaCodecList::BinderDeathObserver> MediaCodecList::sBinderDeathObserver;
sp<IBinder> MediaCodecList::sMediaPlayer;  // kept since linked to deathvoid MediaCodecList::BinderDeathObserver::binderDied(const wp<IBinder> &who __unused) {Mutex::Autolock _l(sRemoteInitMutex);sRemoteList.clear();sBinderDeathObserver.clear();
}// static
sp<IMediaCodecList> MediaCodecList::getInstance() {Mutex::Autolock _l(sRemoteInitMutex);if (sRemoteList == nullptr) {sMediaPlayer = defaultServiceManager()->getService(String16("media.player"));sp<IMediaPlayerService> service =interface_cast<IMediaPlayerService>(sMediaPlayer);if (service.get() != nullptr) {sRemoteList = service->getCodecList();if (sRemoteList != nullptr) {sBinderDeathObserver = new BinderDeathObserver();sMediaPlayer->linkToDeath(sBinderDeathObserver.get());}}if (sRemoteList == nullptr) {// if failed to get remote list, create local listsRemoteList = getLocalInstance();}}return sRemoteList;
}MediaCodecList::MediaCodecList(std::vector<MediaCodecListBuilderBase*> builders) {mGlobalSettings = new AMessage();mCodecInfos.clear();MediaCodecListWriter writer;for (MediaCodecListBuilderBase *builder : builders) {if (builder == nullptr) {ALOGD("ignored a null builder");continue;}auto currentCheck = builder->buildMediaCodecList(&writer);if (currentCheck != OK) {ALOGD("ignored failed builder");continue;} else {mInitCheck = currentCheck;}}writer.writeGlobalSettings(mGlobalSettings);writer.writeCodecInfos(&mCodecInfos);std::stable_sort(mCodecInfos.begin(),mCodecInfos.end(),[](const sp<MediaCodecInfo> &info1, const sp<MediaCodecInfo> &info2) {// null is lowestreturn info1 == nullptr|| (info2 != nullptr && info1->getRank() < info2->getRank());});// remove duplicate entriesbool dedupe = property_get_bool("debug.stagefright.dedupe-codecs", true);if (dedupe) {std::set<std::string> codecsSeen;for (auto it = mCodecInfos.begin(); it != mCodecInfos.end(); ) {std::string codecName = (*it)->getCodecName();if (codecsSeen.count(codecName) == 0) {codecsSeen.emplace(codecName);it++;} else {it = mCodecInfos.erase(it);}}}
}MediaCodecList::~MediaCodecList() {
}status_t MediaCodecList::initCheck() const {return mInitCheck;
}

相关文章:

Android 13 - Media框架(24)- MediaCodecList

这一节我们要了解 MediaCodecList 中的信息是如何加载的&#xff0c;以及这些信息是如何使用到的。 // static sp<IMediaCodecList> MediaCodecList::getLocalInstance() {Mutex::Autolock autoLock(sInitMutex);if (sCodecList nullptr) {MediaCodecList *codecList n…...

【稳定检索|投稿优惠】2024年交通运输与能源动力国际学术会议(IACTEP 2024)

2024年交通运输与能源动力国际学术会议(IACTEP 2024) 2024 International Academic Conference on Transportation and Energy Power(IACTEP) 一、【会议简介】 2024年交通运输与能源动力国际学术会议(IACTEP 2024)将在美丽的三亚盛大启幕。本次会议将聚焦交通运输与能源动力等…...

React学习计划-React16--React基础(三)收集表单数据、高阶函数柯里化、类的复习

1. 收集表单数据 包含表单的组件分类 受控组件——页面中所有输入类的DOM,随着输入&#xff0c;把值存维护在状态里&#xff0c;需要用的时候去状态里取值&#xff08;推荐&#xff0c;避免了过渡使用ref&#xff09;非受控组件——页面中所有输入类的DOM&#xff0c;现用现取…...

研究生课程 |《数值分析》复习

搭配往年真题册食用最佳。...

55 回溯算法解黄金矿工问题

问题描述&#xff1a;你要开发一座金矿&#xff0c;地质学家已经探明了这座金矿中的资源分布&#xff0c;并用大小为m*n的网格grid进行了标注&#xff0c;每个单元格中的整数就表示这一单元格中的黄金数量&#xff1b;如果单元格是空的&#xff0c;那么就是0&#xff0c;为了使…...

[笔记]ByteBuffer垃圾回收

参考&#xff1a;https://blog.csdn.net/lom9357bye/article/details/133702169 public static void main(String[] args) throws Throwable {List<Object> list new ArrayList<>();Thread thread new Thread(() -> {ByteBuffer byteBuffer ByteBuffer.alloc…...

c++ opencv中unsigned char *、Mat、Qimage互相转换

unsigned char * 转Mat unsinged char * data img.data; Mat mat (h,w,cv_8UC3,data,0);void * 转Qimage uchar * bit (uchar*)pRknnInputData; QImage image QImage(bit, 2048,1536, QImage::Format_RGB888);qimage转Mat QImage image QImage (MODEL_INPUT_WIDTH_SIZE,MODE…...

法线贴图实现衣服上皱褶特效

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 法线贴图在3D建模中扮演着重要的角色&#xff0c;它通过模拟表面的微…...

2017年第六届数学建模国际赛小美赛B题电子邮件中的笔迹分析解题全过程文档及程序

2017年第六届数学建模国际赛小美赛 B题 电子邮件中的笔迹分析 原题再现&#xff1a; 笔迹分析是一种非常特殊的调查形式&#xff0c;用于将人们与书面证据联系起来。在法庭或刑事调查中&#xff0c;通常要求笔迹鉴定人确认笔迹样本是否来自特定的人。由于许多语言证据出现在电…...

CentOS安装Python解释,CentOS设置python虚拟环境,linux设置python虚拟环境

一、安装python解释器 1、创建解释器安装的目录&#xff1a;/usr/local/python39 cd /usr/local mkdir python39 2、下载依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel xz-devel …...

在线智能防雷监控(检测)系统应用方案

在线智能防雷监控系统是一种利用现代信息技术&#xff0c;对防雷设施的运行状态进行实时监测、管理和控制的系统&#xff0c;它可以有效提高防雷保护的安全性、可靠性和智能化程度&#xff0c;降低运维成本和风险&#xff0c;为用户提供全方位的防雷解决方案。 在线智能防雷监控…...

flutter + firebase 云消息通知教程 (android-安卓、ios-苹果)

如果能看到这篇文章的 一定已经对手机端的 消息推送通知 有了一定了解。 国内安卓厂商这里不提都有自己的FCM 可自行查找。&#xff08;国内因无法科学原因 &#xff0c;不能使用谷歌服务&#xff09;只说海外的。 目前 adnroid 和 ios 推送消息分别叫 FCM 和 APNs。这里通过…...

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析

从战争中学习战争。对于参加2024年PMP考试的小伙伴来说&#xff0c;最有效的学习方式是这样地&#xff1a;①阅读了教材&#xff08;PMBOK6、7和敏捷&#xff09;&#xff0c;了解基本概念&#xff1b;②反复刷近期的PMP考试真题&#xff0c;查漏补缺。 为此&#xff0c;华研荟…...

vscode开发python环境配置

前言 vscode作为一款好用的轻量级代码编辑器&#xff0c;不仅支持代码调试&#xff0c;而且还有丰富的插件库&#xff0c;可以说是免费好用&#xff0c;对于初学者来说用来写写python是再合适不过了。下面就推荐几款个人觉得还不错的插件&#xff0c;希望可以帮助大家更好地写…...

数据库客户案例:每个物种都需要一个数据库!

1、GERDH——花卉多组学数据库 项目名称&#xff1a;GERDH&#xff1a;花卉多组学数据库 链接地址&#xff1a;https://dphdatabase.com 项目描述&#xff1a;GERDH包含了来自150多种园艺花卉植物种质的 12961个观赏植物。将不同花卉植物转录组学、表观组学等数据进行比较&am…...

数据分析思维导图

参考&#xff1a; https://zhuanlan.zhihu.com/p/567761684?utm_id0 1、数据分析步骤地图 2、数据分析基础知识地图 3、数据分析技术知识地图 4、数据分析业务流程 5、数据分析师能力体系 6、数据分析思路体系 7、电商数据分析核心主题 8、数据科学技能书知识地图 9、数据挖掘…...

网络基础【网线的制作、OSI七层模型、集线器、交换机介绍、路由器的配置】

目录 一.网线的制作 1.1.网线的标准 1.2.水晶头的做法 二.OSI七层模型、集线器、交换机介绍 集线器&#xff08;Hub&#xff09;&#xff1a; 交换机&#xff08;Switch&#xff09;&#xff1a; 三.路由器的配置 3.1.使用 3.2.常用的功能介绍 1、如何管理路由器 2、家…...

C++中的继承(二)

文章目录 前言多继承虚继承虚继承的底层组合 前言 上一篇文章我们C的正常继承其实已经讲完了&#xff0c;但是后面还有一个大坑。 实际当中继承有单继承和多继承。 单继承就是直接继承一个类。 只有一个直接父类的就叫做单继承。 如果是单继承那就比较简单。 现实世界除了有…...

sklearn多项式回归和线性回归

什么是线性回归&#xff1f; 回归分析是一种统计学方法&#xff0c;用于研究自变量和因变量之间的关系。它是一种建立关系模型的方法&#xff0c;可以帮助我们预测和解释变量之间的相互作用。 回归分析通常用于预测一个或多个因变量的值&#xff0c;这些因变量的值是由一个或多…...

Postman报:400 Bad Request

● 使用Postman发送Post请求报400&#xff0c;入参为JSON&#xff1b; 二、分析 1、Postman请求并没有请求到后台Api&#xff08;由于语法错误&#xff0c;服务器无法理解请求&#xff09;&#xff1b; 2、入参出错范围&#xff1a;cookie、header、body、form-data、x-www-f…...

腾讯地图API实战:5分钟搞定经纬度录入与地图选点功能(Vue版)

腾讯地图API实战&#xff1a;5分钟搞定经纬度录入与地图选点功能&#xff08;Vue版&#xff09; 在当今的Web开发中&#xff0c;地图功能已成为许多应用的标配需求。无论是电商平台的店铺定位&#xff0c;还是社交应用的位置分享&#xff0c;甚至是企业内部系统的区域管理&…...

Turbo实战:如何用任务编排优化你的Monorepo构建流程?以pnpm+vitepress为例

Turbo实战&#xff1a;如何用任务编排优化你的Monorepo构建流程&#xff1f;以pnpmvitepress为例 在当今前端工程化领域&#xff0c;Monorepo已成为管理复杂项目的标配方案。但当项目规模增长到一定程度时&#xff0c;传统的构建方式往往会面临效率瓶颈——每次全量构建耗时漫长…...

从零开始深度学习:PyTorch 2.8镜像环境配置与验证教程

从零开始深度学习&#xff1a;PyTorch 2.8镜像环境配置与验证教程 1. 为什么选择PyTorch 2.8镜像&#xff1f; 深度学习环境配置一直是让开发者头疼的问题&#xff0c;特别是当需要GPU加速时&#xff0c;PyTorch版本、CUDA工具包、显卡驱动之间的兼容性问题常常让人望而却步。…...

用DeerFlow做竞品分析:5分钟自动生成全面竞品研究报告

用DeerFlow做竞品分析&#xff1a;5分钟自动生成全面竞品研究报告 1. DeerFlow简介&#xff1a;您的智能研究助手 DeerFlow是一款由字节跳动开源的深度研究自动化工具&#xff0c;它整合了语言模型、网络搜索和代码执行能力&#xff0c;能够快速完成复杂的研究任务。这个工具…...

解密革命性构建工具:PoeCharm如何突破传统限制实现高效角色规划

解密革命性构建工具&#xff1a;PoeCharm如何突破传统限制实现高效角色规划 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 在流放之路的复杂游戏生态中&#xff0c;角色构建往往成为玩家面临的最大…...

开源像素艺术生成工具上手指南:像素幻梦2.0-Stable镜像免配置部署

开源像素艺术生成工具上手指南&#xff1a;像素幻梦2.0-Stable镜像免配置部署 1. 像素幻梦简介 像素幻梦(Pixel Dream Workshop)是一款基于FLUX.1-dev扩散模型构建的下一代像素艺术生成工具。它采用16-bit像素工坊风格的视觉设计&#xff0c;为创作者提供沉浸式的AI绘图体验。…...

mrm-can-bus:轻量级嵌入式CAN设备服务协议库

1. 项目概述mrm-can-bus是一个面向嵌入式设备控制场景的轻量级 CAN 总线通信库&#xff0c;定位为“CAN Bus connectivity and local functions exposed via CAN Bus, common part”——即提供标准化的 CAN 连接能力&#xff0c;并将本地设备功能&#xff08;如 GPIO 控制、ADC…...

1815《中国城市统计年鉴》面板数据(1985-2024)

1、搜说数据皮皮侠2、使用兑换码 516004233462b5Qy0SoHIf26 获取注意&#xff1a;兑换码2026.3.30&#xff08;不包括30号&#xff09;前有效&#xff01;数据简介《中国城市统计年鉴》是国家统计局城市社会经济调查司主办的、全面反映中国城市经济和社会发展情况的资料性年刊。…...

OpenClaw跨平台同步:GLM-4.7-Flash配置在多设备间保持一致

OpenClaw跨平台同步&#xff1a;GLM-4.7-Flash配置在多设备间保持一致 1. 为什么需要跨设备同步OpenClaw配置 上周我在出差时遇到一个尴尬场景&#xff1a;笔记本上的OpenClaw突然无法响应飞书消息&#xff0c;而所有配置都留在办公室的台式机上。这让我意识到——当AI助手成…...

GLM-OCR场景应用:教育资料数字化、商务文档信息抽取实战

GLM-OCR场景应用&#xff1a;教育资料数字化、商务文档信息抽取实战 1. 引言&#xff1a;文档智能化的时代需求 在信息爆炸的今天&#xff0c;我们每天都要处理大量纸质文档和电子文件。教育机构需要将历年试卷数字化归档&#xff0c;企业财务部门要处理堆积如山的发票和合同…...