博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hwc_overlay
阅读量:4222 次
发布时间:2019-05-26

本文共 3920 字,大约阅读时间需要 13 分钟。

1,

/* this layer is to be drawn into the framebuffer by SurfaceFlinger */

HWC_FRAMEBUFFER;

 /* this layer will be handled in the HWC */

HWC_OVERLAY = 1,

2,

/ /hwcomposer.tegra3.so

3, 三星驱动

https://bitbucket.org/seandroid/device-samsung-crespo/src/c932ac3b9f8a53a5c433dc7d3cfa2fb5d45a7eb9/libhwcomposer/SecHWC.cpp?at=seandroid

static int hwc_prepare(hwc_composer_device_t *dev, hwc_layer_list_t* list){
struct hwc_context_t* ctx = (struct hwc_context_t*)dev; int overlay_win_cnt = 0; int compositionType = 0; int ret; //if geometry is not changed, there is no need to do any work here if( !list || (!(list->flags & HWC_GEOMETRY_CHANGED))) return 0; //all the windows are free here.... for (int i = 0; i < NUM_OF_WIN; i++) {
ctx->win[i].status = HWC_WIN_FREE; ctx->win[i].buf_index = 0; } ctx->num_of_hwc_layer = 0; ctx->num_of_fb_layer = 0; LOGV("%s:: hwc_prepare list->numHwLayers %d", __func__, list->numHwLayers); for (int i = 0; i < list->numHwLayers ; i++) {
hwc_layer_t* cur = &list->hwLayers[i]; if (overlay_win_cnt < NUM_OF_WIN) {
compositionType = get_hwc_compos_decision(cur); if (compositionType == HWC_FRAMEBUFFER) {
cur->compositionType = HWC_FRAMEBUFFER; ctx->num_of_fb_layer++; } else {
ret = assign_overlay_window(ctx, cur, overlay_win_cnt, i); if (ret != 0) {
cur->compositionType = HWC_FRAMEBUFFER; ctx->num_of_fb_layer++; continue; } cur->compositionType = HWC_OVERLAY; cur->hints = HWC_HINT_CLEAR_FB; overlay_win_cnt++; ctx->num_of_hwc_layer++; } } else {
cur->compositionType = HWC_FRAMEBUFFER; ctx->num_of_fb_layer++; } } if(list->numHwLayers != (ctx->num_of_fb_layer + ctx->num_of_hwc_layer)) LOGV("%s:: numHwLayers %d num_of_fb_layer %d num_of_hwc_layer %d ", __func__, list->numHwLayers, ctx->num_of_fb_layer, ctx->num_of_hwc_layer); if (overlay_win_cnt < NUM_OF_WIN) {
//turn off the free windows for (int i = overlay_win_cnt; i < NUM_OF_WIN; i++) {
window_hide(&ctx->win[i]); reset_win_rect_info(&ctx->win[i]); } } return 0;} static int get_hwc_compos_decision(hwc_layer_t* cur){
if(cur->flags & HWC_SKIP_LAYER || !cur->handle) {
LOGV("%s::is_skip_layer %d cur->handle %x", __func__, cur->flags & HWC_SKIP_LAYER, (uint32_t)cur->handle); return HWC_FRAMEBUFFER; } IMG_native_handle_t *prev_handle = (IMG_native_handle_t *)(cur->handle); int compositionType = HWC_FRAMEBUFFER; /* check here....if we have any resolution constraints */ if (((cur->sourceCrop.right - cur->sourceCrop.left) < 16) || ((cur->sourceCrop.bottom - cur->sourceCrop.top) < 8)) return compositionType; if ((cur->transform == HAL_TRANSFORM_ROT_90) || (cur->transform == HAL_TRANSFORM_ROT_270)) {
if(((cur->displayFrame.right - cur->displayFrame.left) < 4)|| ((cur->displayFrame.bottom - cur->displayFrame.top) < 8)) return compositionType; } else if (((cur->displayFrame.right - cur->displayFrame.left) < 8) || ((cur->displayFrame.bottom - cur->displayFrame.top) < 4)) return compositionType; if((prev_handle->usage & GRALLOC_USAGE_PHYS_CONTIG) && (cur->blending == HWC_BLENDING_NONE)) compositionType = HWC_OVERLAY; else compositionType = HWC_FRAMEBUFFER; LOGV("%s::compositionType %d bpp %d format %x usage %x", __func__,compositionType, prev_handle->uiBpp, prev_handle->iFormat, prev_handle->usage & GRALLOC_USAGE_PHYS_CONTIG); return compositionType;}  

转载地址:http://saomi.baihongyu.com/

你可能感兴趣的文章
Comma2k19数据集使用
查看>>
面向自动驾驶车辆验证的抽象仿真场景生成
查看>>
一种应用于GPS反欺骗的基于MLE的RAIM改进方法
查看>>
自动驾驶汽车CAN总线数字孪生建模(二)
查看>>
自动驾驶汽车GPS系统数字孪生建模(一)
查看>>
自动驾驶汽车GPS系统数字孪生建模(二)
查看>>
上海控安入选首批工控安全防护能力贯标咨询机构名单
查看>>
自动驾驶汽车传感器数字孪生建模(一)
查看>>
CUDA 学习(四)、线程
查看>>
CUDA 学习(五)、线程块
查看>>
CUDA 学习(八)、线程块调度
查看>>
CUDA 学习(九)、CUDA 内存
查看>>
CUDA 学习(十一)、共享内存
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十四章 生化尖兵
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十五章 超级马里奥64
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十七章 游戏感的原理
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十八章 我想做的游戏
查看>>
游戏设计的艺术:一本透镜的书——第十章 某些元素是游戏机制
查看>>
游戏设计的艺术:一本透镜的书——第十一章 游戏机制必须平衡
查看>>
游戏设计的艺术:一本透镜的书——第十二章 游戏机制支撑谜题
查看>>