当前位置: 首页 > 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/a/155613.html

相关文章:

  • git配置远程仓库的认证信息
  • RabbitMQ高效的消息队列中间件原理及实践
  • 【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何查看PDS系统的自阻抗操作指导
  • 如何从头开始构建神经网络?(附教程)
  • Matlab: 生成对抗网络,使用Datastore结构输入mat格式数据
  • 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搭建补充