您的位置:首页 > 运维架构 > Linux

intel gpu 解码

2017-08-18 17:46 190 查看

背景

在linux上使用intel的gpu加速解码h264,根据以往的经验往往需要将intel gpu的demo集成到我们自己代码当中, 但是这样局限性很大, 每一代的gpu加速的修改, 我们代码都需要调整,得不偿失。

封装接口

接口类

class  SRH264DecInterface
{
public:

virtual int InitDecode() = 0;
virtual int Decode(const SRDec_H264Data &/*[in]*/ h264_data, SRDec_YuvData &/*[out]*/ yuv_data) = 0;
public:
SRH264DecInterface(){};
virtual ~SRH264DecInterface(){};

};


实现类

class H264IntelDecode: public SRH264DecInterface
{
public:
H264IntelDecode();
~H264IntelDecode();

int InitDecode();
int Decode(const SRDec_H264Data &/*[in]*/ h264_data, SRDec_YuvData &/*[out]*/ yuv_data);

private:
bool                                    _init_flag;
protected:
mfxStatus CreateHWDevice();

private:
int Release();
mfxStatus InitMfxParams();
mfxStatus AllocFrames();

mfxStatus CreateAllocator();
int DecConvertSurfaceToBistream(mfxFrameSurface1 *surface);

int DecExtendBitstream(int new_size, mfxBitstream *pbs);

mfxStatus MFXDecodeHeader();
mfxStatus MFXDecodePacket(SRDec_YuvData &/*[out]*/ yuv_data);

private:

bool                       m_bExternalAlloc; // use memory allocator as external for Media SDK

MFXVideoSession            m_mfxSession;
mfxIMPL                    m_impl;

MFXVideoDECODE*            m_pmfxDEC;
mfxVideoParam              m_mfxVideoParams;

GeneralAllocator*          m_pGeneralAllocator;
mfxFrameAllocResponse      m_mfxResponse;

mfxAllocatorParams*        m_pmfxAllocatorParams;

mfxFrameSurface1*          m_pmfxSurfaces;

MemType                    m_memType;
mfxBitstream               m_mfxBS;

CHWDevice                 *m_hwdev;

bool                      _initParaSucc;
int   width;
int   height;

mfxI32                    m_monitorType;

FILE * fp_yuv;

mfxBitstream * frame_bs;

};


注意

这里结合了sample_decode这个demo, windows版本和Linux版本都调试通了

联系

qq群 h264学习过程交流 191884149
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gpu 英特尔 linux