/* * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef MODULES_VIDEO_CODING_ENCODER_DATABASE_H_ #define MODULES_VIDEO_CODING_ENCODER_DATABASE_H_ #include #include #include "api/video_codecs/video_codec.h" #include "api/video_codecs/video_encoder.h" #include "modules/video_coding/generic_encoder.h" namespace webrtc { class VCMEncoderDataBase { public: explicit VCMEncoderDataBase(VCMEncodedFrameCallback* encoded_frame_callback); ~VCMEncoderDataBase(); // Sets the sender side codec and initiates the desired codec given the // VideoCodec struct. // Returns true if the codec was successfully registered, false otherwise. bool SetSendCodec(const VideoCodec* send_codec, int number_of_cores, size_t max_payload_size); // Registers and initializes an external encoder object. // |internal_source| should be set to true if the codec has an internal // video source and doesn't need the user to provide it with frames via // the Encode() method. void RegisterExternalEncoder(VideoEncoder* external_encoder, bool internal_source); // Deregisters any external encoder. void DeregisterExternalEncoder(); VCMGenericEncoder* GetEncoder(); bool MatchesCurrentResolution(int width, int height) const; private: // Determines whether a new codec has to be created or not. // Checks every setting apart from maxFramerate and startBitrate. bool RequiresEncoderReset(const VideoCodec& send_codec); void DeleteEncoder(); int number_of_cores_; size_t max_payload_size_; bool pending_encoder_reset_; VideoCodec send_codec_; VideoEncoder* external_encoder_; bool internal_source_; VCMEncodedFrameCallback* const encoded_frame_callback_; std::unique_ptr ptr_encoder_; }; } // namespace webrtc #endif // MODULES_VIDEO_CODING_ENCODER_DATABASE_H_