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