Home | History | Annotate | Download | only in interface
      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_INTERFACE_VIDEO_CODING_DEFINES_H_
     12 #define WEBRTC_MODULES_INTERFACE_VIDEO_CODING_DEFINES_H_
     13 
     14 #include "webrtc/common_video/interface/i420_video_frame.h"
     15 #include "webrtc/modules/interface/module_common_types.h"
     16 #include "webrtc/typedefs.h"
     17 
     18 namespace webrtc {
     19 
     20 // Error codes
     21 #define VCM_FRAME_NOT_READY      3
     22 #define VCM_REQUEST_SLI          2
     23 #define VCM_MISSING_CALLBACK     1
     24 #define VCM_OK                   0
     25 #define VCM_GENERAL_ERROR       -1
     26 #define VCM_LEVEL_EXCEEDED      -2
     27 #define VCM_MEMORY              -3
     28 #define VCM_PARAMETER_ERROR     -4
     29 #define VCM_UNKNOWN_PAYLOAD     -5
     30 #define VCM_CODEC_ERROR         -6
     31 #define VCM_UNINITIALIZED       -7
     32 #define VCM_NO_CODEC_REGISTERED -8
     33 #define VCM_JITTER_BUFFER_ERROR -9
     34 #define VCM_OLD_PACKET_ERROR    -10
     35 #define VCM_NO_FRAME_DECODED    -11
     36 #define VCM_ERROR_REQUEST_SLI   -12
     37 #define VCM_NOT_IMPLEMENTED     -20
     38 
     39 #define VCM_RED_PAYLOAD_TYPE        96
     40 #define VCM_ULPFEC_PAYLOAD_TYPE     97
     41 #define VCM_VP8_PAYLOAD_TYPE       100
     42 #define VCM_I420_PAYLOAD_TYPE      124
     43 
     44 enum VCMVideoProtection {
     45   kProtectionNack,                // Both send-side and receive-side
     46   kProtectionNackSender,          // Send-side only
     47   kProtectionNackReceiver,        // Receive-side only
     48   kProtectionDualDecoder,
     49   kProtectionFEC,
     50   kProtectionNackFEC,
     51   kProtectionKeyOnLoss,
     52   kProtectionKeyOnKeyLoss,
     53   kProtectionPeriodicKeyFrames
     54 };
     55 
     56 enum VCMTemporalDecimation {
     57   kBitrateOverUseDecimation,
     58 };
     59 
     60 struct VCMFrameCount {
     61   uint32_t numKeyFrames;
     62   uint32_t numDeltaFrames;
     63 };
     64 
     65 // Callback class used for sending data ready to be packetized
     66 class VCMPacketizationCallback {
     67  public:
     68   virtual int32_t SendData(
     69       FrameType frameType,
     70       uint8_t payloadType,
     71       uint32_t timeStamp,
     72       int64_t capture_time_ms,
     73       const uint8_t* payloadData,
     74       uint32_t payloadSize,
     75       const RTPFragmentationHeader& fragmentationHeader,
     76       const RTPVideoHeader* rtpVideoHdr) = 0;
     77  protected:
     78   virtual ~VCMPacketizationCallback() {
     79   }
     80 };
     81 
     82 // Callback class used for passing decoded frames which are ready to be rendered.
     83 class VCMReceiveCallback {
     84  public:
     85   virtual int32_t FrameToRender(I420VideoFrame& videoFrame) = 0;
     86   virtual int32_t ReceivedDecodedReferenceFrame(
     87       const uint64_t pictureId) {
     88     return -1;
     89   }
     90   // Called when the current receive codec changes.
     91   virtual void IncomingCodecChanged(const VideoCodec& codec) {}
     92 
     93  protected:
     94   virtual ~VCMReceiveCallback() {
     95   }
     96 };
     97 
     98 // Callback class used for informing the user of the bit rate and frame rate produced by the
     99 // encoder.
    100 class VCMSendStatisticsCallback {
    101  public:
    102   virtual int32_t SendStatistics(const uint32_t bitRate,
    103                                        const uint32_t frameRate) = 0;
    104 
    105  protected:
    106   virtual ~VCMSendStatisticsCallback() {
    107   }
    108 };
    109 
    110 // Callback class used for informing the user of the incoming bit rate and frame rate.
    111 class VCMReceiveStatisticsCallback {
    112  public:
    113   virtual int32_t OnReceiveStatisticsUpdate(const uint32_t bitRate,
    114                                             const uint32_t frameRate) = 0;
    115 
    116  protected:
    117   virtual ~VCMReceiveStatisticsCallback() {
    118   }
    119 };
    120 
    121 // Callback class used for informing the user of decode timing info.
    122 class VCMDecoderTimingCallback {
    123  public:
    124   virtual void OnDecoderTiming(int decode_ms,
    125                                int max_decode_ms,
    126                                int current_delay_ms,
    127                                int target_delay_ms,
    128                                int jitter_buffer_ms,
    129                                int min_playout_delay_ms,
    130                                int render_delay_ms) = 0;
    131 
    132  protected:
    133   virtual ~VCMDecoderTimingCallback() {}
    134 };
    135 
    136 // Callback class used for telling the user about how to configure the FEC,
    137 // and the rates sent the last second is returned to the VCM.
    138 class VCMProtectionCallback {
    139  public:
    140   virtual int ProtectionRequest(const FecProtectionParams* delta_params,
    141                                 const FecProtectionParams* key_params,
    142                                 uint32_t* sent_video_rate_bps,
    143                                 uint32_t* sent_nack_rate_bps,
    144                                 uint32_t* sent_fec_rate_bps) = 0;
    145 
    146  protected:
    147   virtual ~VCMProtectionCallback() {
    148   }
    149 };
    150 
    151 // Callback class used for telling the user about what frame type needed to continue decoding.
    152 // Typically a key frame when the stream has been corrupted in some way.
    153 class VCMFrameTypeCallback {
    154  public:
    155   virtual int32_t RequestKeyFrame() = 0;
    156   virtual int32_t SliceLossIndicationRequest(
    157       const uint64_t pictureId) {
    158     return -1;
    159   }
    160 
    161  protected:
    162   virtual ~VCMFrameTypeCallback() {
    163   }
    164 };
    165 
    166 // Callback class used for telling the user about which packet sequence numbers are currently
    167 // missing and need to be resent.
    168 class VCMPacketRequestCallback {
    169  public:
    170   virtual int32_t ResendPackets(const uint16_t* sequenceNumbers,
    171                                       uint16_t length) = 0;
    172 
    173  protected:
    174   virtual ~VCMPacketRequestCallback() {
    175   }
    176 };
    177 
    178 // Callback used to inform the user of the the desired resolution
    179 // as subscribed by Media Optimization (Quality Modes)
    180 class VCMQMSettingsCallback {
    181  public:
    182   virtual int32_t SetVideoQMSettings(const uint32_t frameRate,
    183                                            const uint32_t width,
    184                                            const uint32_t height) = 0;
    185 
    186  protected:
    187   virtual ~VCMQMSettingsCallback() {
    188   }
    189 };
    190 
    191 // Callback class used for telling the user about the size (in time) of the
    192 // render buffer, that is the size in time of the complete continuous frames.
    193 class VCMRenderBufferSizeCallback {
    194  public:
    195   virtual void RenderBufferSizeMs(int buffer_size_ms) = 0;
    196 
    197  protected:
    198   virtual ~VCMRenderBufferSizeCallback() {
    199   }
    200 };
    201 
    202 }  // namespace webrtc
    203 
    204 #endif // WEBRTC_MODULES_INTERFACE_VIDEO_CODING_DEFINES_H_
    205