diff --git a/plugins/obs-qsv11/QSV_Encoder.cpp b/plugins/obs-qsv11/QSV_Encoder.cpp index 9c098bd78..dd3a9352e 100644 --- a/plugins/obs-qsv11/QSV_Encoder.cpp +++ b/plugins/obs-qsv11/QSV_Encoder.cpp @@ -61,7 +61,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "QSV_Encoder_Internal.h" #include #include -#include +#include #include #define do_log(level, format, ...) \ @@ -70,7 +70,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. mfxIMPL impl = MFX_IMPL_HARDWARE_ANY; mfxVersion ver = {{0, 1}}; // for backward compatibility -std::mutex active_mutex; +std::atomic is_active{false}; void qsv_encoder_version(unsigned short *major, unsigned short *minor) { @@ -80,7 +80,8 @@ void qsv_encoder_version(unsigned short *major, unsigned short *minor) qsv_t *qsv_encoder_open(qsv_param_t *pParams) { - if (!active_mutex.try_lock()) { + bool false_value = false; + if (!is_active.compare_exchange_strong(false_value, true)) { do_log(LOG_ERROR, "Cannot have more than one encoder " "active at a time"); return NULL; @@ -91,7 +92,7 @@ qsv_t *qsv_encoder_open(qsv_param_t *pParams) if (sts != MFX_ERR_NONE) { delete pEncoder; if (pEncoder) - active_mutex.unlock(); + is_active.store(false); return NULL; } @@ -132,7 +133,7 @@ int qsv_encoder_close(qsv_t *pContext) delete pEncoder; if (pEncoder) - active_mutex.unlock(); + is_active.store(false); return 0; }