Remove references to AudioCodec and VideoCodec constructors

The preferred method to create codecs is to use the function
cricket::CreateAudioCodec or cricketCreateVideoCodec.
Empty codec objects are deprecated and should be replaced
with alternatives such as methods returning an
absl::optional object instead.

Bug: webrtc:15214
Change-Id: I7fe40f64673cd407830dbbb0e541b85a3aee93aa
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/307521
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40226}
diff --git a/pc/rtp_parameters_conversion.cc b/pc/rtp_parameters_conversion.cc
index 196cb79..fa8599c 100644
--- a/pc/rtp_parameters_conversion.cc
+++ b/pc/rtp_parameters_conversion.cc
@@ -18,6 +18,7 @@
 
 #include "api/array_view.h"
 #include "api/media_types.h"
+#include "media/base/codec.h"
 #include "media/base/media_constants.h"
 #include "media/base/rtp_utils.h"
 #include "rtc_base/checks.h"
@@ -80,13 +81,12 @@
 }
 
 template <typename C>
-static RTCError ToCricketCodecTypeSpecific(const RtpCodecParameters& codec,
-                                           C* cricket_codec);
+static RTCErrorOr<C> ToCricketCodecTypeSpecific(
+    const RtpCodecParameters& codec);
 
 template <>
-RTCError ToCricketCodecTypeSpecific<cricket::AudioCodec>(
-    const RtpCodecParameters& codec,
-    cricket::AudioCodec* cricket_codec) {
+RTCErrorOr<cricket::AudioCodec> ToCricketCodecTypeSpecific<cricket::AudioCodec>(
+    const RtpCodecParameters& codec) {
   if (codec.kind != cricket::MEDIA_TYPE_AUDIO) {
     LOG_AND_RETURN_ERROR(
         RTCErrorType::INVALID_PARAMETER,
@@ -100,7 +100,6 @@
     LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_RANGE,
                          "Number of channels must be positive.");
   }
-  cricket_codec->channels = *codec.num_channels;
   if (!codec.clock_rate) {
     LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER,
                          "Missing codec clock rate.");
@@ -109,17 +108,16 @@
     LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_RANGE,
                          "Clock rate must be positive.");
   }
-  cricket_codec->clockrate = *codec.clock_rate;
-  return RTCError::OK();
+  return cricket::CreateAudioCodec(0, codec.name, *codec.clock_rate,
+                                   *codec.num_channels);
 }
 
 // Video codecs don't use num_channels or clock_rate, but they should at least
 // be validated to ensure the application isn't trying to do something it
 // doesn't intend to.
 template <>
-RTCError ToCricketCodecTypeSpecific<cricket::VideoCodec>(
-    const RtpCodecParameters& codec,
-    cricket::VideoCodec*) {
+RTCErrorOr<cricket::VideoCodec> ToCricketCodecTypeSpecific<cricket::VideoCodec>(
+    const RtpCodecParameters& codec) {
   if (codec.kind != cricket::MEDIA_TYPE_VIDEO) {
     LOG_AND_RETURN_ERROR(
         RTCErrorType::INVALID_PARAMETER,
@@ -137,18 +135,17 @@
     LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER,
                          "Video clock rate must be 90000.");
   }
-  return RTCError::OK();
+  return cricket::CreateVideoCodec(0, codec.name);
 }
 
 template <typename C>
 RTCErrorOr<C> ToCricketCodec(const RtpCodecParameters& codec) {
-  C cricket_codec;
   // Start with audio/video specific conversion.
-  RTCError err = ToCricketCodecTypeSpecific(codec, &cricket_codec);
-  if (!err.ok()) {
-    return std::move(err);
+  RTCErrorOr<C> result = ToCricketCodecTypeSpecific<C>(codec);
+  if (!result.ok()) {
+    return result.MoveError();
   }
-  cricket_codec.name = codec.name;
+  C cricket_codec = result.MoveValue();
   if (!cricket::IsValidRtpPayloadType(codec.payload_type)) {
     char buf[40];
     rtc::SimpleStringBuilder sb(buf);