X265的多线程 -- ThreadSafeInteger
创始人
2025-05-28 05:39:45
0

ThreadSafeInteger类

class ThreadSafeInteger
{
public:ThreadSafeInteger();~ThreadSafeInteger();int waitForChange(int prev);int get();int getIncr(int n = 1);void set(int newval);void poke(void);void incr();void decr();protected:CRITICAL_SECTION   m_cs;	// 临界区变量,用于变量访问安全CONDITION_VARIABLE m_cv;	// 条件变量,用于线程同步int                m_val;
};

CRITICAL_SECTION m_cs;

和函数EnterCriticalSection以及LeaveCriticalSection搭配使用。
对多个线程经常访问的同一个变量m_val,对应建立一个临界变量。访问m_val前一定要保证对应的临界变量是空闲的。

CONDITION_VARIABLE m_cv;

为什么需要线程同步?
消费者线程和生产者线程之间的关系,消费者线程需要消费时向商店发出申请,生产者线程生产完了放进商店给他拿走。
如果没有线程同步,则消费者线程和生产者线程都是使用while(true)各自保持全速待命状态。这样就存在一个问题,CPU占用率过高。
这个时候的解决方法就是根据条件变量阻塞线程,消费者没提出需求之前,就把条件变量置0,生产者线程一直等待,直到他变成了1才开始执行。

和函数SleepConditionVariableCS以及WakeAllConditionVariable搭配使用。

SleepConditionVariableCS(&m_cv, &m_cs, INFINITE);

条件变量m_cv处于等待,等待时间是INFINITE,同时为m_cs上锁

m_startEndOrder

incr()的操作

ABR/VBV:
rateControlStart()如果输入帧为null时,这个时候encoder在flush
rateControlEnd()完成率控操作时,m_startEndOrder.m_val ++;
rateControlUpdateStats(),编完一半时,m_startEndOrder.m_val ++;主要是用于vbv和ABR的码率统计
CQP/CRF:
compressFrame():CQP/CRF:不使用midframe的信息来调整编码参数,所以编码完成后 m_startEndOrder.m_val ++;

waitForChange()的操作

rateControlStart(),确定每一帧的QP,确定前waitfor,线程启动的条件是:m_val == prev
rateControlEnd(),结束一帧的率控,

调用顺序记录

  1. rateControlStart() -> orderValue = m_startEndOrder.waitForChange(orderValue); // 保证执行顺序,开启帧级并行的时候有用,对应frame-threads != 1的时候
  2. rateControlUpdateStats() -> m_startEndOrder.incr();
  3. rateControlEnd() -> orderValue = m_startEndOrder.waitForChange(orderValue); // 保证执行顺序,开启帧级并行的时候有用,对应frame-threads != 1的时候
  4. rateControlEnd() -> m_startEndOrder.incr();
  5. setFinalFrameCount() -> m_startEndOrder.poke()

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...