diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index c09b5f355163311088ba50e985958cf297cb14fb..d00944e8da0b1d7782a370532657f36b33fa2243 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -375,6 +375,7 @@ VideoRtpSession::adaptQualityAndBitrate()
 
     if (rtcpLongCheckTimer.count() >= RTCP_LONG_CHECKING_INTERVAL) {
         needToCheckQuality = true;
+        hasReachMaxQuality_ = false;
         lastLongRTCPCheck_ = std::chrono::system_clock::now();
         // we force iterative bitrate adaptation
         videoBitrateInfo_.cptBitrateChecking = 0;
@@ -415,12 +416,15 @@ VideoRtpSession::adaptQualityAndBitrate()
             if (((videoBitrateInfo_.videoQualityCurrent != SystemCodecInfo::DEFAULT_NO_QUALITY) &&
                     (videoBitrateInfo_.videoQualityCurrent !=  (histoQuality_.empty() ? 0 : histoQuality_.back()))) ||
                 ((videoBitrateInfo_.videoQualityCurrent == SystemCodecInfo::DEFAULT_NO_QUALITY) &&
-                    (videoBitrateInfo_.videoBitrateCurrent !=  (histoBitrate_.empty() ? 0 : histoBitrate_.back()))))
+                    (videoBitrateInfo_.videoBitrateCurrent !=  (histoBitrate_.empty() ? 0 : histoBitrate_.back())))) {
                 mediaRestartNeeded = true;
+                hasReachMaxQuality_ = true;
+            }
 
 
         // no packet lost: increase quality and bitrate
-        } else if (videoBitrateInfo_.cptBitrateChecking <= videoBitrateInfo_.maxBitrateChecking) {
+        } else if ((videoBitrateInfo_.cptBitrateChecking <= videoBitrateInfo_.maxBitrateChecking)
+                   and not hasReachMaxQuality_) {
 
             // calculate new quality by dichotomie
             videoBitrateInfo_.videoQualityCurrent =
diff --git a/src/media/video/video_rtp_session.h b/src/media/video/video_rtp_session.h
index 5010cb62f46d9c2ebab71a21237b9ce399fb7faa..8d8c4f6ae77c3d392e9d1b621539c4f92b9e5a44 100644
--- a/src/media/video/video_rtp_session.h
+++ b/src/media/video/video_rtp_session.h
@@ -117,9 +117,10 @@ private:
     static constexpr unsigned MAX_SIZE_HISTO_QUALITY_ {30};
     static constexpr unsigned MAX_SIZE_HISTO_BITRATE_ {100};
 
-    //5 tries in a row
+    // 5 tries in a row
     static constexpr unsigned  MAX_ADAPTATIVE_BITRATE_ITERATION {5};
-    //packet loss threshold
+    bool hasReachMaxQuality_ {false};
+    // packet loss threshold
     static constexpr float PACKET_LOSS_THRESHOLD {1.0};
 
     InterruptedThreadLoop rtcpCheckerThread_;