diff --git a/src/media/video/sinkclient.cpp b/src/media/video/sinkclient.cpp
index 16b0ec343c0ac1fd7180043c695d93e47243e85f..1126eabe291c12fe5403b50a9133c6af65fa75bb 100644
--- a/src/media/video/sinkclient.cpp
+++ b/src/media/video/sinkclient.cpp
@@ -353,7 +353,7 @@ SinkClient::update(Observable<std::shared_ptr<MediaFrame>>* /*obs*/,
     }
 #endif
 
-    std::lock_guard<std::mutex> lock(mtx_);
+    std::unique_lock<std::mutex> lock(mtx_);
     if (avTarget_.push) {
         auto outFrame = std::make_unique<VideoFrame>();
         outFrame->copyFrom(*std::static_pointer_cast<VideoFrame>(frame_p));
@@ -424,6 +424,7 @@ SinkClient::update(Observable<std::shared_ptr<MediaFrame>>* /*obs*/,
         }
 
         if (frame->height() != height_ || frame->width() != width_) {
+            lock.unlock();
             setFrameSize(0, 0);
             setFrameSize(frame->width(), frame->height());
             return;