From 87f3f337e0f5ca9ee85ff11abbca6527c2cb0468 Mon Sep 17 00:00:00 2001
From: Eloi BAIL <eloi.bail@savoirfairelinux.com>
Date: Mon, 30 Nov 2015 12:19:52 -0500
Subject: [PATCH] media/video: reuse default quality parameters

When several calls were performed, quality and bitrates of previous
call were used. When stopping VideoRtpSession, we make sure to reset default
values.

Change-Id: Ibe7b58f33979fae734dbbe3f7c31bd4d57c5a13f
Tuleap: #156
---
 src/media/media_codec.h               |  1 +
 src/media/system_codec_container.cpp  | 11 +++++------
 src/media/video/video_rtp_session.cpp |  7 +++++++
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/media/media_codec.h b/src/media/media_codec.h
index 46ed7896ea..aa5e339d12 100644
--- a/src/media/media_codec.h
+++ b/src/media/media_codec.h
@@ -65,6 +65,7 @@ struct SystemCodecInfo
     static constexpr unsigned DEFAULT_H264_MAX_QUALITY {25};
     static constexpr unsigned DEFAULT_VP8_MIN_QUALITY {50};
     static constexpr unsigned DEFAULT_VP8_MAX_QUALITY {20};
+    static constexpr unsigned DEFAULT_VIDEO_BITRATE {250}; // in Kbits/second
 #endif
 
     // indicates that the codec does not use quality factor
diff --git a/src/media/system_codec_container.cpp b/src/media/system_codec_container.cpp
index 30b52ed5d8..f9bdaa8ed6 100644
--- a/src/media/system_codec_container.cpp
+++ b/src/media/system_codec_container.cpp
@@ -31,8 +31,6 @@ namespace ring {
 
 decltype(getGlobalInstance<SystemCodecContainer>)& getSystemCodecContainer = getGlobalInstance<SystemCodecContainer>;
 
-constexpr static auto DEFAULT_VIDEO_BITRATE = 250; // in Kbits/second
-
 SystemCodecContainer::SystemCodecContainer()
 {
     initCodecConfig();
@@ -51,6 +49,7 @@ SystemCodecContainer::initCodecConfig()
     auto maxH264 = SystemCodecInfo::DEFAULT_H264_MAX_QUALITY;
     auto minVP8 = SystemCodecInfo::DEFAULT_VP8_MIN_QUALITY;
     auto maxVP8 = SystemCodecInfo::DEFAULT_VP8_MAX_QUALITY;
+    auto defaultBitrate = SystemCodecInfo::DEFAULT_VIDEO_BITRATE;
 #endif
     availableCodecList_ = {
 #ifdef RING_VIDEO
@@ -58,26 +57,26 @@ SystemCodecContainer::initCodecConfig()
         std::make_shared<SystemVideoCodecInfo>(AV_CODEC_ID_H264,
                                                "H264", "libx264",
                                                CODEC_ENCODER_DECODER,
-                                               DEFAULT_VIDEO_BITRATE,
+                                               defaultBitrate,
                                                minH264,
                                                maxH264),
 
         std::make_shared<SystemVideoCodecInfo>(AV_CODEC_ID_VP8,
                                                "VP8", "libvpx",
                                                CODEC_ENCODER_DECODER,
-                                               DEFAULT_VIDEO_BITRATE,
+                                               defaultBitrate,
                                                minVP8,
                                                maxVP8),
 
         std::make_shared<SystemVideoCodecInfo>(AV_CODEC_ID_MPEG4,
                                                "MP4V-ES", "mpeg4",
                                                CODEC_ENCODER_DECODER,
-                                               DEFAULT_VIDEO_BITRATE),
+                                               defaultBitrate),
 
         std::make_shared<SystemVideoCodecInfo>(AV_CODEC_ID_H263,
                                                "H263-1998", "h263",
                                                CODEC_ENCODER_DECODER,
-                                               DEFAULT_VIDEO_BITRATE),
+                                               defaultBitrate),
 #endif
         /* Define supported audio codec*/
 
diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index bfe5ab3c95..02abf7bf1f 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -193,6 +193,13 @@ void VideoRtpSession::stop()
     if (socketPair_)
         socketPair_->interrupt();
 
+    // reset default video quality if exist
+    if (videoBitrateInfo_.videoQualityCurrent != SystemCodecInfo::DEFAULT_NO_QUALITY)
+        videoBitrateInfo_.videoQualityCurrent = SystemCodecInfo::DEFAULT_CODEC_QUALITY;
+
+    videoBitrateInfo_.videoBitrateCurrent = SystemCodecInfo::DEFAULT_VIDEO_BITRATE;
+    storeVideoBitrateInfo();
+
     receiveThread_.reset();
     sender_.reset();
     socketPair_.reset();
-- 
GitLab