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

Android 13 - Media框架(21)- ACodec(三)

这一节我们将继续来学习 ACodec 的剩余部分。

    enum {
        kFlagIsSecure                                 = 1,
        kFlagPushBlankBuffersToNativeWindowOnShutdown = 2,
        kFlagIsGrallocUsageProtected                  = 4,
        kFlagPreregisterMetadataBuffers               = 8,
    };

    enum {
        kVideoGrallocUsage = (GRALLOC_USAGE_HW_TEXTURE
                            | GRALLOC_USAGE_HW_COMPOSER
                            | GRALLOC_USAGE_EXTERNAL_DISP)
                            | static_cast<uint64_t>(BufferUsage::VIDEO_DECODER),
    };

    struct BufferInfo {
        enum Status {
            OWNED_BY_US,
            OWNED_BY_COMPONENT,
            OWNED_BY_UPSTREAM,
            OWNED_BY_DOWNSTREAM,
            OWNED_BY_NATIVE_WINDOW,
            UNRECOGNIZED,            // not a tracked buffer
        };

        static inline Status getSafeStatus(BufferInfo *info) {
            return info == NULL ? UNRECOGNIZED : info->mStatus;
        }

        IOMX::buffer_id mBufferID;
        Status mStatus;
        unsigned mDequeuedAt;

        sp<MediaCodecBuffer> mData;  // the client's buffer; if not using data conversion, this is
                                     // the codec buffer; otherwise, it is allocated separately
        sp<RefBase> mMemRef;         // and a reference to the IMemory, so it does not go away
        sp<MediaCodecBuffer> mCodecData;  // the codec's buffer
        sp<RefBase> mCodecRef;            // and a reference to the IMemory

        sp<GraphicBuffer> mGraphicBuffer;
        bool mNewGraphicBuffer;
        int mFenceFd;
        FrameRenderTracker::Info *mRenderInfo;

        // The following field and 4 methods are used for debugging only
        bool mIsReadFence;
        // Store |fenceFd| and set read/write flag. Log error, if there is already a fence stored.
        void setReadFence(int fenceFd, const char *dbg);
        void setWriteFence(int fenceFd, const char *dbg);
        // Log error, if the current fence is not a read/write fence.
        void checkReadFence(const char *dbg);
        void checkWriteFence(const char *dbg);
    };

http://www.kler.cn/news/155613.html

相关文章:

  • selinux-policy-default(2:2.20231119-2)软件包内容详细介绍(5)
  • 【深度学习实验】图像处理(四):PIL——自定义图像数据增强操作(图像合成;图像融合(高斯掩码))
  • 链表算法总结
  • Apache Doris 整合 FLINK 、 Hudi 构建湖仓一体的联邦查询入门
  • 接口测试快速入门 以飞致云平台为例
  • Selenium Grid
  • OpenCV入门11——图像的分割与修复
  • Helix QAC 2023.3版本发布,新增对C++20的支持等多个功能,实现100%MISRA C++:2023®规则覆盖
  • centos7中通过kubeadmin安装k8s集群
  • 解决OSError: [Errno 28] No space left on device报错和搭建AIrtest无线配置手机集群
  • PyQt基础_007_ 按钮类控件QCombox
  • matplotilb画图
  • 数学字体 Mathematical fonts
  • 渗透测试学习day4
  • RedisTemplate的配置和讲解以及和StringRedisTemplate的区别
  • 分享一个国内可用的免费AI-GPT网站
  • PHP字符串面试题
  • c语言-归并排序
  • 网页表格复制器(油猴插件脚本)
  • 飞天使-elk搭建补充
  • ubuntu下快速搭建docker环境训练yolov5数据集
  • 【栈和队列(2)】
  • 破解app思路
  • 数据结构和算法-哈夫曼树以相关代码实现
  • 软件工程单选多选补充
  • 运维 | 关于IP网络相关的概念和原理
  • 第16届中国R会议暨2023X-AGI大会开幕,和鲸科技分享ModelOps在数据科学平台中的实践与应用
  • QT Day01 qt概述,创建项目,窗口属性,按钮,信号与槽
  • ES6 Promise的用法,async/await异步处理同步化
  • JOSEF电流继电器 DL-33 整定范围0.5-2A 柜内安装板前接线