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);
}
}
多线程使用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);
}
}
相关文章推荐
- SQLserver 存储过程生成任意进制/顺序流水号
- git reset简介
- Lucene4.1 视频学习
- 学C++不得不看的一篇文章[转]
- error C2668: 'sqrt' : ambiguous call to overloaded
- Android应用检测更新
- 依赖注入随写
- C++ - "动态内存成员" 的 类设计 (值和指针)
- (Warshall13.1.1)POJ 2253(计算任意一对顶点之间的连通性||求最大路的最小值——图的传递闭包)
- java.lang.OutOfMemoryError的两种解决办法
- c语言中字符串比较易错的地方
- taobao topsdk获取商品信息
- C++ - "动态内存成员" 的 类设计 (值和指针)
- 入门视频采集与处理(学会分析YUV数据)
- hdu 4426 Palindromic Substring 字符串hash
- UVA - 10099 The Tourist Guide
- Training—Loading Data in the Background
- Linux远程连接Windows:rdesktop
- 成为IT经理的十项软技能
- js判断手机访问网站自动跳转到手机版