Split audio and video channels into Send and Receive APIs.

The implementation here has a number of changes that force the callers
that called the "channel" functions into specific interfaces rather than
just letting C++ take care of it; this should go away once there stops
being a common implementation class for those interfaces.

Bug: webrtc:13931
Change-Id: Ic4e279528a341bc0a0e88d2e1e76c90bc43a1035
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/287640
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38888}
diff --git a/pc/channel_interface.h b/pc/channel_interface.h
index 032bfad..445712b 100644
--- a/pc/channel_interface.h
+++ b/pc/channel_interface.h
@@ -28,6 +28,7 @@
 
 namespace cricket {
 
+class MediaChannel;
 class MediaContentDescription;
 struct MediaConfig;
 
@@ -47,16 +48,20 @@
   virtual ~ChannelInterface() = default;
   virtual cricket::MediaType media_type() const = 0;
 
+  // Temporary fix while MediaChannel is being reconstructed
+  virtual MediaChannel* media_channel() const = 0;
   virtual MediaSendChannelInterface* media_send_channel() const = 0;
   // Typecasts of media_channel(). Will cause an exception if the
   // channel is of the wrong type.
-  virtual VideoMediaChannel* video_media_send_channel() const = 0;
-  virtual VoiceMediaChannel* voice_media_send_channel() const = 0;
+  virtual VideoMediaSendChannelInterface* video_media_send_channel() const = 0;
+  virtual VoiceMediaSendChannelInterface* voice_media_send_channel() const = 0;
   virtual MediaReceiveChannelInterface* media_receive_channel() const = 0;
   // Typecasts of media_channel(). Will cause an exception if the
   // channel is of the wrong type.
-  virtual VideoMediaChannel* video_media_receive_channel() const = 0;
-  virtual VoiceMediaChannel* voice_media_receive_channel() const = 0;
+  virtual VideoMediaReceiveChannelInterface* video_media_receive_channel()
+      const = 0;
+  virtual VoiceMediaReceiveChannelInterface* voice_media_receive_channel()
+      const = 0;
 
   // Returns a string view for the transport name. Fetching the transport name
   // must be done on the network thread only and note that the lifetime of