From 2129643c8169d6895b20848af94259f0c81adae7 Mon Sep 17 00:00:00 2001 From: pingkai Date: Tue, 3 Mar 2020 17:55:22 +0800 Subject: [PATCH] fix(AppleVideoToolBox): fix err in backgroud recoverage do not create decoder in bg recreate decoder when SessionErr Signed-off-by: pingkai --- framework/codec/Apple/AppleVideoToolBox.cpp | 6 ++++-- framework/codec/Apple/AppleVideoToolBox.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/framework/codec/Apple/AppleVideoToolBox.cpp b/framework/codec/Apple/AppleVideoToolBox.cpp index 1a860c641..8f28bd13e 100644 --- a/framework/codec/Apple/AppleVideoToolBox.cpp +++ b/framework/codec/Apple/AppleVideoToolBox.cpp @@ -97,10 +97,11 @@ namespace Cicada { // return ret; // mGotFirstFrame = false; - if (meta->extradata && meta->extradata_size > 0) { + if (meta->extradata && meta->extradata_size > 0 && mActive) { ret = createDecompressionSession(meta->extradata, meta->extradata_size, meta->width, meta->height); if (ret < 0) { + AF_LOGE("createDecompressionSession error\n"); return ret; } } @@ -526,8 +527,9 @@ namespace Cicada { CFRelease(sampleBuffer); if (rv == kVTInvalidSessionErr) { - mActive = false; + AF_LOGW("kVTInvalidSessionErr\n"); pPacket.reset(packet); + close_decoder(); return -EAGAIN; } diff --git a/framework/codec/Apple/AppleVideoToolBox.h b/framework/codec/Apple/AppleVideoToolBox.h index 3eed67f98..f59c07df5 100644 --- a/framework/codec/Apple/AppleVideoToolBox.h +++ b/framework/codec/Apple/AppleVideoToolBox.h @@ -105,7 +105,7 @@ namespace Cicada{ int mInputCount{0}; bool mThrowPacket{false}; std::mutex mActiveStatusMutex; - bool mActive{true}; + std::atomic_bool mActive{true}; AFPixelFormat mVTOutFmt = AF_PIX_FMT_NONE; std::unique_ptr mPInMeta{nullptr}; std::queue> mRecoveryQueue{};