RtpTransceiver: add kStopped enumeration value.

This change introduces a new kStopped enumeration value to
RtpTransceiverDirection, preparing for later CLs which
implement RTP header extension control,
https://chromestatus.com/feature/5680189201711104.

The new enumeration value is unused in the code.

Intent to prototype: https://groups.google.com/a/chromium.org/g/blink-dev/c/65YdUi02yZk

Bug: chromium:980879
Change-Id: Id8cab9891236884542689fbf1b300e64a2cb636d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/170050
Commit-Queue: Markus Handell <handellm@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30756}
diff --git a/api/rtp_transceiver_interface.h b/api/rtp_transceiver_interface.h
index 2a60f98..2af42aa 100644
--- a/api/rtp_transceiver_interface.h
+++ b/api/rtp_transceiver_interface.h
@@ -31,7 +31,8 @@
   kSendRecv,
   kSendOnly,
   kRecvOnly,
-  kInactive
+  kInactive,
+  kStopped,
 };
 
 // Structure for initializing an RtpTransceiver in a call to
diff --git a/pc/media_session.cc b/pc/media_session.cc
index 110258d..9190f6e 100644
--- a/pc/media_session.cc
+++ b/pc/media_session.cc
@@ -1749,9 +1749,10 @@
       return audio_send_codecs_;
     case RtpTransceiverDirection::kRecvOnly:
       return audio_recv_codecs_;
+    case RtpTransceiverDirection::kStopped:
+      RTC_NOTREACHED();
+      return audio_sendrecv_codecs_;
   }
-  RTC_NOTREACHED();
-  return audio_sendrecv_codecs_;
 }
 
 const AudioCodecs& MediaSessionDescriptionFactory::GetAudioCodecsForAnswer(
@@ -1768,9 +1769,10 @@
       return audio_send_codecs_;
     case RtpTransceiverDirection::kRecvOnly:
       return audio_recv_codecs_;
+    case RtpTransceiverDirection::kStopped:
+      RTC_NOTREACHED();
+      return audio_sendrecv_codecs_;
   }
-  RTC_NOTREACHED();
-  return audio_sendrecv_codecs_;
 }
 
 void MergeCodecsFromDescription(
diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc
index 41e2767..548b778 100644
--- a/pc/media_session_unittest.cc
+++ b/pc/media_session_unittest.cc
@@ -4785,6 +4785,8 @@
                                             kResultSendrecv_SendrecvCodecs);
         }
         break;
+      default:
+        RTC_NOTREACHED();
     }
 
     auto format_codecs = [](const std::vector<AudioCodec>& codecs) {
diff --git a/pc/rtp_media_utils.cc b/pc/rtp_media_utils.cc
index 6e8be58..8fbfca1 100644
--- a/pc/rtp_media_utils.cc
+++ b/pc/rtp_media_utils.cc
@@ -47,9 +47,10 @@
       return RtpTransceiverDirection::kRecvOnly;
     case RtpTransceiverDirection::kRecvOnly:
       return RtpTransceiverDirection::kSendOnly;
+    default:
+      RTC_NOTREACHED();
+      return direction;
   }
-  RTC_NOTREACHED();
-  return direction;
 }
 
 RtpTransceiverDirection RtpTransceiverDirectionWithSendSet(
@@ -76,6 +77,8 @@
       return "kRecvOnly";
     case RtpTransceiverDirection::kInactive:
       return "kInactive";
+    case RtpTransceiverDirection::kStopped:
+      return "kStopped";
   }
   RTC_NOTREACHED();
   return "";
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index 29a9030..7846e5e 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -1596,7 +1596,12 @@
       InitAttrLine(kAttributeRecvOnly, &os);
       break;
     case RtpTransceiverDirection::kSendRecv:
+      InitAttrLine(kAttributeSendRecv, &os);
+      break;
+    case RtpTransceiverDirection::kStopped:
     default:
+      // kStopped shouldn't be used in signalling.
+      RTC_NOTREACHED();
       InitAttrLine(kAttributeSendRecv, &os);
       break;
   }
diff --git a/pc/webrtc_sdp_unittest.cc b/pc/webrtc_sdp_unittest.cc
index 476955d..f79fbb8 100644
--- a/pc/webrtc_sdp_unittest.cc
+++ b/pc/webrtc_sdp_unittest.cc
@@ -979,7 +979,11 @@
       new_direction = "a=recvonly";
       break;
     case RtpTransceiverDirection::kSendRecv:
+      new_direction = "a=sendrecv";
+      break;
+    case RtpTransceiverDirection::kStopped:
     default:
+      RTC_NOTREACHED();
       new_direction = "a=sendrecv";
       break;
   }
diff --git a/sdk/objc/api/peerconnection/RTCRtpTransceiver.h b/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
index 8ef3fc1..968dba3 100644
--- a/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
+++ b/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
@@ -22,6 +22,7 @@
   RTCRtpTransceiverDirectionSendOnly,
   RTCRtpTransceiverDirectionRecvOnly,
   RTCRtpTransceiverDirectionInactive,
+  RTCRtpTransceiverDirectionStopped
 };
 
 /** Structure for initializing an RTCRtpTransceiver in a call to
diff --git a/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm b/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
index fe1ebb5..74ea456 100644
--- a/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
@@ -149,6 +149,8 @@
       return webrtc::RtpTransceiverDirection::kRecvOnly;
     case RTCRtpTransceiverDirectionInactive:
       return webrtc::RtpTransceiverDirection::kInactive;
+    case RTCRtpTransceiverDirectionStopped:
+      return webrtc::RtpTransceiverDirection::kStopped;
   }
 }
 
@@ -163,6 +165,8 @@
       return RTCRtpTransceiverDirectionRecvOnly;
     case webrtc::RtpTransceiverDirection::kInactive:
       return RTCRtpTransceiverDirectionInactive;
+    case webrtc::RtpTransceiverDirection::kStopped:
+      return RTCRtpTransceiverDirectionStopped;
   }
 }