⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_h264_spl.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
字号:
/*//////////////////////////////////////////////////////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2003-2005 Intel Corporation. All Rights Reserved.//*/#include "vm_debug.h"#include "umc_h264_spl.h"#include "umc_media_data.h"UMC::StatusUMC::H264Splitter::SelectVideoStream(vm_var32             uiInd,                                     VideoStreamType&     rvType,                                     VideoStreamSubType&  /*rvSubType*/){    Status umcRes = UMC_OK;    vm_var32 fccHandler = m_pStreams[uiInd].sStrmHdr.fccHandler;    if (AVI_FOURCC_ILV4 == fccHandler || AVI_FOURCC_vssh == fccHandler )    {        if (AVI_FOURCC_VIDEOSTRM == m_pStreams[uiInd].sStrmHdr.fccType)        {            rvType = H264_VIDEO;        }    }    else    {   umcRes = UMC_BAD_STREAM;    }    if (UMC_OK != umcRes)    {   vm_debug_trace(4, VM_STRING("H264Splitter SelectVideoStream failed\n"));   }    return umcRes;}static voidSwapBuffer(unsigned long *data, long len){    int          i;//    int          j;    unsigned char temp, temp1, temp2, temp3;    int           remove_cnt = 0;    int           prev_zero_cnt = 0;    unsigned char *read_pos = (unsigned char *)data;    unsigned char *write_pos = (unsigned char *)data;    len = (len + 3) >> 2;    for(i = 0; i < len; i++)    {        if(!read_pos[0] && !read_pos[1] && (read_pos[2] == 3) && ((read_pos[3]&0xfc) == 0))        {            temp    = read_pos[0];            temp1   = read_pos[1];            temp2   = read_pos[3];            temp3   = read_pos[4];            write_pos[0] = temp3;            write_pos[3] = temp;            write_pos[1] = temp2;            write_pos[2] = temp1;            read_pos+= 5;            prev_zero_cnt = 0;        }        else if(!read_pos[1] && !read_pos[2] && (read_pos[3] == 3) && ((read_pos[4]&0xfc) == 0))        {            temp    = read_pos[0];            temp1   = read_pos[1];            temp2   = read_pos[2];            temp3   = read_pos[4];            write_pos[0] = temp3;            write_pos[3] = temp;            write_pos[1] = temp2;            write_pos[2] = temp1;            read_pos+= 5;            remove_cnt++;            if(remove_cnt == 4)            {                remove_cnt = 0;                i++;            }            prev_zero_cnt = 0;        }        else if((prev_zero_cnt==2) && (read_pos[0] == 3) && ((read_pos[1]&0xfc) == 0))        {            temp    = read_pos[1];            temp1   = read_pos[2];            temp2   = read_pos[3];            temp3   = read_pos[4];            write_pos[0] = temp3;            write_pos[3] = temp;            write_pos[1] = temp2;            write_pos[2] = temp1;            read_pos+= 5;            prev_zero_cnt = 0;        }        else if((prev_zero_cnt==1) && !read_pos[0] && (read_pos[1] == 3) && ((read_pos[2]&0xfc) == 0))        {            temp    = read_pos[0];            temp1   = read_pos[2];            temp2   = read_pos[3];            temp3   = read_pos[4];            write_pos[0] = temp3;            write_pos[3] = temp;            temp   = read_pos[2];            write_pos[1] = temp2;            write_pos[2] = temp1;            read_pos+= 5;            prev_zero_cnt = 0;        }        else        {            temp    = read_pos[0];            temp1   = read_pos[1];            temp2   = read_pos[2];            temp3   = read_pos[3];            prev_zero_cnt = 0;            if(!read_pos[2] && !read_pos[3])                prev_zero_cnt = 2;            else if(!read_pos[3])                prev_zero_cnt=1;            write_pos[0] = temp3;            write_pos[3] = temp;            write_pos[1] = temp2;            write_pos[2] = temp1;            read_pos+= 4;        }        write_pos+= 4;    }}UMC::StatusUMC::H264Splitter::GetNextVideoData(MediaData* pMData, vm_var32 uiIndex){    Status umcRes = UMC_OK;    umcRes = BaseAVISplitter::GetNextVideoData(pMData, uiIndex);/*    if (UMC_OK == umcRes)    {        unsigned long* pulData = (unsigned long*)pMData->GetDataPointer();        vm_var32 uiDataSize = pMData->GetDataSize();        uiDataSize = (((uiDataSize + 3)>> 2)) << 2;        SwapBuffer(pulData, uiDataSize);        pMData->SetBufferPointer(reinterpret_cast<unsigned char*>(pulData),                           uiDataSize);    }*/    return umcRes;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -