LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/modules/video_coding - codec_database.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 1 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
       3             :  *
       4             :  *  Use of this source code is governed by a BSD-style license
       5             :  *  that can be found in the LICENSE file in the root of the source
       6             :  *  tree. An additional intellectual property rights grant can be found
       7             :  *  in the file PATENTS.  All contributing project authors may
       8             :  *  be found in the AUTHORS file in the root of the source tree.
       9             :  */
      10             : 
      11             : #ifndef WEBRTC_MODULES_VIDEO_CODING_CODEC_DATABASE_H_
      12             : #define WEBRTC_MODULES_VIDEO_CODING_CODEC_DATABASE_H_
      13             : 
      14             : #include <map>
      15             : #include <memory>
      16             : 
      17             : #include "webrtc/modules/video_coding/include/video_codec_interface.h"
      18             : #include "webrtc/modules/video_coding/include/video_coding.h"
      19             : #include "webrtc/modules/video_coding/generic_decoder.h"
      20             : #include "webrtc/modules/video_coding/generic_encoder.h"
      21             : #include "webrtc/typedefs.h"
      22             : 
      23             : namespace webrtc {
      24             : 
      25           0 : struct VCMDecoderMapItem {
      26             :  public:
      27             :   VCMDecoderMapItem(VideoCodec* settings,
      28             :                     int number_of_cores,
      29             :                     bool require_key_frame);
      30             : 
      31             :   std::unique_ptr<VideoCodec> settings;
      32             :   int number_of_cores;
      33             :   bool require_key_frame;
      34             : };
      35             : 
      36             : struct VCMExtDecoderMapItem {
      37             :  public:
      38             :   VCMExtDecoderMapItem(VideoDecoder* external_decoder_instance,
      39             :                        uint8_t payload_type);
      40             : 
      41             :   uint8_t payload_type;
      42             :   VideoDecoder* external_decoder_instance;
      43             : };
      44             : 
      45             : class VCMCodecDataBase {
      46             :  public:
      47             :   explicit VCMCodecDataBase(VCMEncodedFrameCallback* encoded_frame_callback);
      48             :   ~VCMCodecDataBase();
      49             : 
      50             :   // Sender Side
      51             :   // Returns the default settings for the codec with type |codec_type|.
      52             :   static void Codec(VideoCodecType codec_type, VideoCodec* settings);
      53             : 
      54             :   // Sets the sender side codec and initiates the desired codec given the
      55             :   // VideoCodec struct.
      56             :   // Returns true if the codec was successfully registered, false otherwise.
      57             :   bool SetSendCodec(const VideoCodec* send_codec,
      58             :                     int number_of_cores,
      59             :                     size_t max_payload_size);
      60             : 
      61             :   // Gets the current send codec. Relevant for internal codecs only.
      62             :   // Returns true if there is a send codec, false otherwise.
      63             :   bool SendCodec(VideoCodec* current_send_codec) const;
      64             : 
      65             :   // Gets current send side codec type. Relevant for internal codecs only.
      66             :   // Returns kVideoCodecUnknown if there is no send codec.
      67             :   VideoCodecType SendCodec() const;
      68             : 
      69             :   // Registers and initializes an external encoder object.
      70             :   // |internal_source| should be set to true if the codec has an internal
      71             :   // video source and doesn't need the user to provide it with frames via
      72             :   // the Encode() method.
      73             :   void RegisterExternalEncoder(VideoEncoder* external_encoder,
      74             :                                uint8_t payload_type,
      75             :                                bool internal_source);
      76             : 
      77             :   // Deregisters an external encoder. Returns true if the encoder was
      78             :   // found and deregistered, false otherwise. |was_send_codec| is set to true
      79             :   // if the external encoder was the send codec before being deregistered.
      80             :   bool DeregisterExternalEncoder(uint8_t payload_type, bool* was_send_codec);
      81             : 
      82             :   VCMGenericEncoder* GetEncoder();
      83             : 
      84             :   bool SetPeriodicKeyFrames(bool enable);
      85             : 
      86             :   // Deregisters an external decoder object specified by |payload_type|.
      87             :   bool DeregisterExternalDecoder(uint8_t payload_type);
      88             : 
      89             :   // Registers an external decoder object to the payload type |payload_type|.
      90             :   void RegisterExternalDecoder(VideoDecoder* external_decoder,
      91             :                                uint8_t payload_type);
      92             : 
      93             :   bool DecoderRegistered() const;
      94             : 
      95             :   bool RegisterReceiveCodec(const VideoCodec* receive_codec,
      96             :                             int number_of_cores,
      97             :                             bool require_key_frame);
      98             : 
      99             :   bool DeregisterReceiveCodec(uint8_t payload_type);
     100             : 
     101             :   // Get current receive side codec. Relevant for internal codecs only.
     102             :   bool ReceiveCodec(VideoCodec* current_receive_codec) const;
     103             : 
     104             :   // Get current receive side codec type. Relevant for internal codecs only.
     105             :   VideoCodecType ReceiveCodec() const;
     106             : 
     107             :   // Returns a decoder specified by |payload_type|. The decoded frame callback
     108             :   // of the encoder is set to |decoded_frame_callback|. If no such decoder
     109             :   // already exists an instance will be created and initialized.
     110             :   // NULL is returned if no encoder with the specified payload type was found
     111             :   // and the function failed to create one.
     112             :   VCMGenericDecoder* GetDecoder(
     113             :       const VCMEncodedFrame& frame,
     114             :       VCMDecodedFrameCallback* decoded_frame_callback);
     115             : 
     116             :   // Deletes the memory of the decoder instance |decoder|. Used to delete
     117             :   // deep copies returned by CreateDecoderCopy().
     118             :   void ReleaseDecoder(VCMGenericDecoder* decoder) const;
     119             : 
     120             :   // Returns true if the currently active decoder prefer to decode frames late.
     121             :   // That means that frames must be decoded near the render times stamp.
     122             :   bool PrefersLateDecoding() const;
     123             : 
     124             :   bool MatchesCurrentResolution(int width, int height) const;
     125             : 
     126             :  private:
     127             :   typedef std::map<uint8_t, VCMDecoderMapItem*> DecoderMap;
     128             :   typedef std::map<uint8_t, VCMExtDecoderMapItem*> ExternalDecoderMap;
     129             : 
     130             :   VCMGenericDecoder* CreateAndInitDecoder(const VCMEncodedFrame& frame,
     131             :                                           VideoCodec* new_codec) const;
     132             : 
     133             :   // Determines whether a new codec has to be created or not.
     134             :   // Checks every setting apart from maxFramerate and startBitrate.
     135             :   bool RequiresEncoderReset(const VideoCodec& send_codec);
     136             : 
     137             :   void DeleteEncoder();
     138             : 
     139             :   // Create an internal Decoder given a codec type
     140             :   VCMGenericDecoder* CreateDecoder(VideoCodecType type) const;
     141             : 
     142             :   const VCMDecoderMapItem* FindDecoderItem(uint8_t payload_type) const;
     143             : 
     144             :   const VCMExtDecoderMapItem* FindExternalDecoderItem(
     145             :       uint8_t payload_type) const;
     146             : 
     147             :   int number_of_cores_;
     148             :   size_t max_payload_size_;
     149             :   bool periodic_key_frames_;
     150             :   bool pending_encoder_reset_;
     151             :   VideoCodec send_codec_;
     152             :   VideoCodec receive_codec_;
     153             :   uint8_t encoder_payload_type_;
     154             :   VideoEncoder* external_encoder_;
     155             :   bool internal_source_;
     156             :   VCMEncodedFrameCallback* const encoded_frame_callback_;
     157             :   std::unique_ptr<VCMGenericEncoder> ptr_encoder_;
     158             :   VCMGenericDecoder* ptr_decoder_;
     159             :   DecoderMap dec_map_;
     160             :   ExternalDecoderMap dec_external_map_;
     161             : };  // VCMCodecDataBase
     162             : 
     163             : }  // namespace webrtc
     164             : 
     165             : #endif  // WEBRTC_MODULES_VIDEO_CODING_CODEC_DATABASE_H_

Generated by: LCOV version 1.13