Cleanup VCMDecoderDataBase and neigbour VCMGenericDecoder classes

Remove private members that are no longer used or always have same value
Use less allocations

Bug: None
Change-Id: I5430c2356f0039212baf8b248b92775e8852ce1b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227765
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34665}
diff --git a/modules/video_coding/decoder_database.h b/modules/video_coding/decoder_database.h
index 81c68e4..406b53e 100644
--- a/modules/video_coding/decoder_database.h
+++ b/modules/video_coding/decoder_database.h
@@ -11,43 +11,31 @@
 #ifndef MODULES_VIDEO_CODING_DECODER_DATABASE_H_
 #define MODULES_VIDEO_CODING_DECODER_DATABASE_H_
 
-#include <map>
-#include <memory>
+#include <stdint.h>
 
+#include <map>
+
+#include "absl/types/optional.h"
+#include "api/video_codecs/video_decoder.h"
+#include "modules/video_coding/encoded_frame.h"
 #include "modules/video_coding/generic_decoder.h"
 
 namespace webrtc {
 
-struct VCMDecoderMapItem {
- public:
-  VCMDecoderMapItem(VideoCodec* settings, int number_of_cores);
-  ~VCMDecoderMapItem();
-
-  std::unique_ptr<VideoCodec> settings;
-  int number_of_cores;
-};
-
-struct VCMExtDecoderMapItem {
- public:
-  VCMExtDecoderMapItem(VideoDecoder* external_decoder_instance,
-                       uint8_t payload_type);
-
-  uint8_t payload_type;
-  VideoDecoder* external_decoder_instance;
-};
-
 class VCMDecoderDataBase {
  public:
-  VCMDecoderDataBase();
-  ~VCMDecoderDataBase();
+  VCMDecoderDataBase() = default;
+  VCMDecoderDataBase(const VCMDecoderDataBase&) = delete;
+  VCMDecoderDataBase& operator=(const VCMDecoderDataBase&) = delete;
+  ~VCMDecoderDataBase() = default;
 
   bool DeregisterExternalDecoder(uint8_t payload_type);
-  void RegisterExternalDecoder(VideoDecoder* external_decoder,
-                               uint8_t payload_type);
+  void RegisterExternalDecoder(uint8_t payload_type,
+                               VideoDecoder* external_decoder);
   bool IsExternalDecoderRegistered(uint8_t payload_type) const;
 
   bool RegisterReceiveCodec(uint8_t payload_type,
-                            const VideoCodec* receive_codec,
+                            const VideoCodec& receive_codec,
                             int number_of_cores);
   bool DeregisterReceiveCodec(uint8_t payload_type);
 
@@ -61,23 +49,19 @@
       VCMDecodedFrameCallback* decoded_frame_callback);
 
  private:
-  typedef std::map<uint8_t, VCMDecoderMapItem*> DecoderMap;
-  typedef std::map<uint8_t, VCMExtDecoderMapItem*> ExternalDecoderMap;
+  struct DecoderSettings {
+    VideoCodec settings;
+    int number_of_cores;
+  };
 
-  std::unique_ptr<VCMGenericDecoder> CreateAndInitDecoder(
-      const VCMEncodedFrame& frame,
-      VideoCodec* new_codec) const;
+  void CreateAndInitDecoder(const VCMEncodedFrame& frame);
 
-  const VCMDecoderMapItem* FindDecoderItem(uint8_t payload_type) const;
-
-  const VCMExtDecoderMapItem* FindExternalDecoderItem(
-      uint8_t payload_type) const;
-
-  uint8_t current_payload_type_;  // Corresponding to receive_codec_.
-  VideoCodec receive_codec_;
-  std::unique_ptr<VCMGenericDecoder> ptr_decoder_;
-  DecoderMap dec_map_;
-  ExternalDecoderMap dec_external_map_;
+  absl::optional<uint8_t> current_payload_type_;
+  absl::optional<VCMGenericDecoder> current_decoder_;
+  // Initialization paramaters for decoders keyed by payload type.
+  std::map<uint8_t, DecoderSettings> decoder_settings_;
+  // Decoders keyed by payload type.
+  std::map<uint8_t, VideoDecoder*> decoders_;
 };
 
 }  // namespace webrtc