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

Android图形系统之HWComposer、ComposerHal、ComposerImpl、Composer、Hwc2::Composer实例总结(十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:Android图形系统中,HWC特别的复杂,特别是HWComposer、ComposerImpl、Composer、Hwc2::Composer之间的关系,有种剪不断理还乱的感觉,通过几个演化例子,看清楚它本来的面目。

2.HWComposer、ComposerImpl、Composer、Hwc2::Composer定义与实现

1.HWComposer实现

frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.h

<1>.android::HWComposer定义
namespace Hwc2 {
class Composer;
}namespace android {
class HWComposer {virtual ~HWComposer();virtual void setCallback(HWC2::ComposerCallback*) = 0;....
};
}
<2>.impl::HWComposer定义(继承自android::HWComposer)
namespace impl {class HWComposer final : public android::HWComposer {
public:explicit HWComposer(std::unique_ptr<Hwc2::Composer> composer);explicit HWComposer(const std::string& composerServiceName);~HWComposer() override;
};
}
<3>.impl::HWComposer实现

frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp

namespace impl {HWComposer::HWComposer(std::unique_ptr<Hwc2::Composer> composer): mComposer(std::move(composer)),mMaxVirtualDisplayDimension(static_cast<size_t>(sysprop::max_virtual_display_dimension(0))),mUpdateDeviceProductInfoOnHotplugReconnect(sysprop::update_device_product_info_on_hotplug_reconnect(false)) {}HWComposer::HWComposer(const std::string& composerServiceName): HWComposer(std::make_unique<Hwc2::impl::Composer>(composerServiceName)) {}HWComposer::~HWComposer() {mDisplayData.clear();
}
}

HWComposer构造函数通过它的委托构造函数,通过std::make_uniqueHwc2::impl::Composer(composerServiceName)实例画,那么Hwc2::impl::Composer的实现在哪呢?

2.ComposerImpl实现(Hwc2::Composer是它的别名)

hardware/interfaces/graphics/composer/2.1/utils/hal/include/composer-hal/2.1/Composer.h

<1>.Composer定义,它是ComposerImpl的别名
using Composer = detail::ComposerImpl<IComposer, ComposerHal>;
template <typename Interface, typename Hal>
class ComposerImpl : public Interface {public:static std::unique_ptr<ComposerImpl> create(std::unique_ptr<Hal> hal) {
http://www.lryc.cn/news/214165.html

相关文章:

  • MASK-RCNN tensorflow环境搭建
  • 企业级开发命名规范有哪些?
  • sitespeedio.io 前端页面监控安装部署接入influxdb 到grafana
  • ModStartCMS v7.5.0 内外网映射节流,安全使用增强
  • 【LVS实战】02 搭建一个LVS-NAT模式实验
  • Word 将文档中的【第几条】批量加粗
  • 苹果AirTag固件更新
  • 04.Oracle的体系架构
  • 01【保姆级】-GO语言特点和安装使用和hello
  • EVM6678L 开发教程: IBL-TFTP 引导 elf 文件
  • 接口测试 —— Jmeter 之测试片段的应用
  • 接入文心一言实战(一):API申请与测试
  • 518抽奖软件,安全稳定,不怕手抖误按键
  • 【STM32G431RBTx】备战蓝桥杯嵌入式汇总
  • 【抽奖系统】
  • 如何在外SSH远程连接Ubuntu系统【无公网IP】
  • 在防御CC攻击上,高防CDN起着什么作用?
  • 被这7款在线涂鸦画板惊艳到,手残也能画出涂鸦大片!
  • pt权重转onnx记录
  • 瑞数专题五
  • 【Androidstudio学习笔记】设计引导页功能
  • 【python】中位数(暴力+最大最小堆)
  • Avro 如何生成java Bean
  • EG4003-一颗为微波、红外信号放大及处理输出的数模混合芯片
  • kafka生产者源码精华总结
  • 边界缩小维护最值——倒序枚举/中部切开:1101T2
  • vue实现购物车案例
  • 工业4G路由器桥接多网络,提升工业环境网络覆盖
  • docker 存储目录迁移
  • Yolo-Z:改进的YOLOv5用于小目标检测