您的位置:首页 > 其它

ffmpeg 多线程初始化,需要做的事

2013-11-09 11:03 375 查看
ffmpeg 多线程初始化,需要做的事

多线程使用ffmpeg 必须由用户提供加锁函数,否则,多线程使用会报错误,具体使用方法如下:

//初始化ffmpeg库

avcodec_register_all();

av_register_all();

av_log_set_callback(ffmpeg_log_callback);

av_lockmgr_register(Codec_Lock_Callback);

int Codec_Lock_Callback(void **mutex, enum AVLockOp op)

{

int nRet = -1;

HANDLE* pHMutex = (HANDLE*)mutex;

switch(op)

{

case AV_LOCK_CREATE:

if(pHMutex)

{

*pHMutex = ::CreateMutex(NULL, FALSE, NULL);

nRet = !(*pHMutex != NULL);

}

break;

case AV_LOCK_DESTROY:

if(pHMutex && *pHMutex)

{

::CloseHandle(*pHMutex);

*pHMutex = NULL;

nRet = 0;

}

break;

case AV_LOCK_OBTAIN:

if(pHMutex && *pHMutex

&& ::WaitForSingleObject(*pHMutex, INFINITE) == WAIT_OBJECT_0)

nRet = 0;

break;

case AV_LOCK_RELEASE:

if(pHMutex && *pHMutex

&& ::ReleaseMutex(*pHMutex))

nRet = 0;

break;

default:

ASSERT(FALSE);

break;

}

return nRet;

}

void ffmpeg_log_callback(void* /*ptr*/, int level, const char* fmt, va_list vl)

{

if(0 <= level && level <= AV_LOG_ERROR)

{

TRACE(fmt, vl);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: