2,543
社区成员
发帖
与我相关
我的任务
分享
avcodec_register_all();
g_pCodec = avcodec_find_decoder(AV_CODEC_ID_H264);
if (g_pCodec==NULL)
{
MSG("avcodec_find_decoder");
return false;
}
g_pAvctx = avcodec_alloc_context3(g_pCodec);
if (g_pAvctx==NULL)
{
MSG("avcodec_alloc_context");
return false;
}
if (avcodec_open2(g_pAvctx, g_pCodec, NULL)<0)
{
MSG("avcodec_open");
return false;
}
void InputData2(void* pData, int nDataLength)
{
AVPacket packet;
av_init_packet(&packet);
packet.data = (uint8_t*)pData;
packet.size = nDataLength;
int nLen;
int frameFinished = nDataLength;
//avcodec_get_frame_defaults(g_pSrcFrame);
nLen = avcodec_decode_video2(g_pAvctx, g_pSrcFrame, &frameFinished, &packet);
}
m_parser = av_parser_init(CODEC_ID_H264);
void InputData(void* pData, int nDataLength)
{
int pos=0;
int64_t pts=AV_NOPTS_VALUE;
int64_t dts=AV_NOPTS_VALUE;
do
{
uint8_t *pout;
int pout_len;
int len= av_parser_parse2(m_parser,g_pAvctx,&pout,&pout_len, ((const uint8_t*)pData)+pos,
nDataLength-pos,pts,dts,AV_NOPTS_VALUE);
pos +=len;
if(pout_len >0 )
{
InputData2(pout,pout_len);
}
} while (pos<nDataLength);
}
我用了av_parser_parse2也不行。。。。。。。。