国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

av_lockmgr_register

2019-11-10 16:59:00
字體:
來源:轉載
供稿:網友

簡介

函數(shù)原型如下:

int av_lockmgr_register (int(*cb)(void **mutex, enum AVLockOp op));

其作用是注冊一個用戶自定義的lock manager, 其中cb可定義如下(ffplay.c):

static int lockmgr(void **mtx, enum AVLockOp op){ switch(op) { case AV_LOCK_CREATE: *mtx = SDL_CreateMutex(); if(!*mtx) { av_log(NULL, AV_LOG_FATAL, "SDL_CreateMutex(): %s/n", SDL_GetError()); return 1; } return 0; case AV_LOCK_OBTAIN: return !!SDL_LockMutex(*mtx); case AV_LOCK_RELEASE: return !!SDL_UnlockMutex(*mtx); case AV_LOCK_DESTROY: SDL_DestroyMutex(*mtx); return 0; } return 1;}

通過傳入的op參數(shù)來創(chuàng)建、加鎖、解鎖以及銷毀操作。

作用

當多個線程調用avcodec_open2、avcodec_close的時可能導致失敗。 從ffmpeg源碼可知,失敗的主要原因是在調用此函數(shù)時為確保函數(shù)為原子操作,在函數(shù)的開頭和結尾處使用了一個變量entangled_thread_counter來記錄當前函數(shù)是否已經有其他線程進入,如果有其他線程正在函數(shù)內運行,則會調用失敗。其解釋如下:

在avcodec_open2函數(shù)開頭有如下判斷, 當返回值小于0時返回。 ret = ff_lock_avcodec(avctx); if (ret < 0) return ret; ff_lock_avcodec定義如下,當lockmgr_cb不為空時調用該函數(shù)加鎖。當entangled_thread_counter大于1時,則返回AVERROR(EINVAL),說明有多個線程在該函數(shù)中運行。 int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec){ if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init) return 0; if (lockmgr_cb) { if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN)) return -1; } if (avPRiv_atomic_int_add_and_fetch(&entangled_thread_counter, 1) != 1) { av_log(log_ctx, AV_LOG_ERROR, "Insufficient thread locking. At least %d threads are " "calling avcodec_open2() at the same time right now./n", entangled_thread_counter); if (!lockmgr_cb) av_log(log_ctx, AV_LOG_ERROR, "No lock manager is set, please see av_lockmgr_register()/n"); ff_avcodec_locked = 1; ff_unlock_avcodec(codec); return AVERROR(EINVAL); } av_assert0(!ff_avcodec_locked); ff_avcodec_locked = 1; return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 富蕴县| 南投市| 彩票| 保康县| 嵊州市| 尉氏县| 岑溪市| 洛宁县| 宽城| 潜江市| 乌恰县| 买车| 辰溪县| 大埔县| 乌兰浩特市| 高陵县| 凤凰县| 新竹市| 合作市| 台前县| 阿鲁科尔沁旗| 哈尔滨市| 平陆县| 涡阳县| 马鞍山市| 夹江县| 望谟县| 米林县| 广河县| 灵璧县| 洮南市| 梅河口市| 临夏县| 榆中县| 小金县| 远安县| 余江县| 蒲江县| 静宁县| 山东| 隆尧县|