IntelMediaSDK SampleDecode learning-3 AllocFrames函数

SDK中内存分配这块比较隐晦,AllocFrames是CreateAllocator后一个很重要的函数。本文就重点介绍该函数中所做的一些操作。先介绍其中比较重要的几个成员结构。

typedef struct {
    union {
        mfxU32  AllocId; // 分配的ID
        mfxU32  reserved[1];
    };
    mfxU32  reserved3[3];
    mfxFrameInfo    Info; // 分配帧的属性
    mfxU16  Type; // 分配的内存类型,详见ExtMemFrameType 
    mfxU16  NumFrameMin; // 分配帧数的最小值
    mfxU16  NumFrameSuggested; // 分配的建议值
    mfxU16  reserved2;
} mfxFrameAllocRequest;

该结构描述了初始化编解码器vpp时的多帧分配参数。分配帧数的建议值。应用程序可自由分配额外的帧。不过,无论怎样,最小帧数必须至少是NumFrameMin,否则会返回错误。
ExtMemFrameType枚举指定了帧的存储类型,关于视频内存表面跟详细的信息,参阅硬件加速部分。该枚举列表如下(去除了部分保留成员和dx成员,linux下开发的),

enum {
    MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET   = 0x0010, // 帧在图像存储中,属于解码渲染目标
    MFX_MEMTYPE_VIDEO_MEMORY_PROCESSOR_TARGET = 0x0020, // 图像存储,vpp
    MFX_MEMTYPE_SYSTEM_MEMORY                 = 0x0040, // 系统存储
    MFX_MEMTYPE_FROM_ENCODE     = 0x0100, // 编码函数的分配请求
    MFX_MEMTYPE_FROM_DECODE     = 0x0200, // 解码函数的分配请求
    MFX_MEMTYPE_FROM_VPPIN      = 0x0400, // vpp输入帧的分配请求
    MFX_MEMTYPE_FROM_VPPOUT     = 0x0800, // vpp输出帧的分配请求
    MFX_MEMTYPE_FROM_ENC        = 0x2000,  
    MFX_MEMTYPE_FROM_PAK        = 0x4000,

    MFX_MEMTYPE_INTERNAL_FRAME  = 0x0001, // 内部帧的分配请求
    NFX_MEMTYPE_EXTERNAL_FRAME  = 0x0002, // I/O帧的分配请求
    MFX_MEMTYPE_OPAQUE_FRAME    = 0x0004, // opaque帧的分配请求
    MFX_MEMTYPE_EXPORT_FRAME    = 0x0008, // 应用程序请求帧句柄导出到相关的对象.linux帧句柄可被认为是导出到DRM Prime FD,DRM FLink 或 DRM FrameBuffer句柄.导出类型和导出过程具体取决于外部帧分配器的实现.
    MFX_MEMTYPE_SHARED_RESOURCE = MFX_MEMTYPE_EXPORT_FRAME,
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值