/* * Copyright (c) 2011 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 WEBRTC_MODULES_INTERFACE_VIDEO_CODING_DEFINES_H_ #define WEBRTC_MODULES_INTERFACE_VIDEO_CODING_DEFINES_H_ #include "typedefs.h" #include "module_common_types.h" namespace webrtc { // Error codes #define VCM_REQUEST_SLI 2 #define VCM_MISSING_CALLBACK 1 #define VCM_OK 0 #define VCM_GENERAL_ERROR -1 #define VCM_LEVEL_EXCEEDED -2 #define VCM_MEMORY -3 #define VCM_PARAMETER_ERROR -4 #define VCM_UNKNOWN_PAYLOAD -5 #define VCM_CODEC_ERROR -6 #define VCM_UNINITIALIZED -7 #define VCM_NO_CODEC_REGISTERED -8 #define VCM_JITTER_BUFFER_ERROR -9 #define VCM_OLD_PACKET_ERROR -10 #define VCM_NO_FRAME_DECODED -11 #define VCM_ERROR_REQUEST_SLI -12 #define VCM_NOT_IMPLEMENTED -20 #define VCM_H263_PAYLOAD_TYPE 34 #define VCM_RED_PAYLOAD_TYPE 96 #define VCM_ULPFEC_PAYLOAD_TYPE 97 #define VCM_H263_1998_PAYLOAD_TYPE 121 #define VCM_VP8_PAYLOAD_TYPE 120 #define VCM_I420_PAYLOAD_TYPE 124 enum VCMNackProperties { kNackHistoryLength = 450 }; enum VCMH263FrameDrop { kDecodePFrames, kDropPFrames }; enum VCMVideoProtection { kProtectionNack, // Both send-side and receive-side kProtectionNackSender, // Send-side only kProtectionNackReceiver, // Receive-side only kProtectionDualDecoder, kProtectionFEC, kProtectionNackFEC, kProtectionKeyOnLoss, kProtectionKeyOnKeyLoss, kProtectionPeriodicKeyFrames }; enum VCMTemporalDecimation { kBitrateOverUseDecimation, }; struct VCMFrameCount { WebRtc_UWord32 numKeyFrames; WebRtc_UWord32 numDeltaFrames; }; // Callback class used for sending data ready to be packetized class VCMPacketizationCallback { public: virtual WebRtc_Word32 SendData(const FrameType frameType, const WebRtc_UWord8 payloadType, const WebRtc_UWord32 timeStamp, const WebRtc_UWord8* payloadData, const WebRtc_UWord32 payloadSize, const RTPFragmentationHeader& fragmentationHeader) = 0; protected: virtual ~VCMPacketizationCallback() {} }; // Callback class used for passing decoded frames which are ready to be rendered. class VCMFrameStorageCallback { public: virtual WebRtc_Word32 StoreReceivedFrame(const EncodedVideoData& frameToStore) = 0; protected: virtual ~VCMFrameStorageCallback() {} }; // Callback class used for passing decoded frames which are ready to be rendered. class VCMReceiveCallback { public: virtual WebRtc_Word32 FrameToRender(VideoFrame& videoFrame) = 0; virtual WebRtc_Word32 ReceivedDecodedReferenceFrame(const WebRtc_UWord64 pictureId) {return -1;} protected: virtual ~VCMReceiveCallback() {} }; // Callback class used for informing the user of the bit rate and frame rate produced by the // encoder. class VCMSendStatisticsCallback { public: virtual WebRtc_Word32 SendStatistics(const WebRtc_UWord32 bitRate, const WebRtc_UWord32 frameRate) = 0; protected: virtual ~VCMSendStatisticsCallback() {} }; // Callback class used for informing the user of the incoming bit rate and frame rate. class VCMReceiveStatisticsCallback { public: virtual WebRtc_Word32 ReceiveStatistics(const WebRtc_UWord32 bitRate, const WebRtc_UWord32 frameRate) = 0; protected: virtual ~VCMReceiveStatisticsCallback() {} }; // Callback class used for telling the user about the requested amount of bit stream protection // Key frame FEC rate, delta frame and whether NACK should be on or off. class VCMProtectionCallback { public: virtual WebRtc_Word32 ProtectionRequest(const WebRtc_UWord8 deltaFECRate, const WebRtc_UWord8 keyFECRate, const bool nack) = 0; protected: virtual ~VCMProtectionCallback() {} }; // Callback class used for telling the user about what frame type needed to continue decoding. // Typically a key frame when the stream has been corrupted in some way. class VCMFrameTypeCallback { public: virtual WebRtc_Word32 FrameTypeRequest(const FrameType frameType) = 0; virtual WebRtc_Word32 SliceLossIndicationRequest(const WebRtc_UWord64 pictureId) {return -1;} protected: virtual ~VCMFrameTypeCallback() {} }; // Callback class used for telling the user about which packet sequence numbers are currently // missing and need to be resent. class VCMPacketRequestCallback { public: virtual WebRtc_Word32 ResendPackets(const WebRtc_UWord16* sequenceNumbers, WebRtc_UWord16 length) = 0; protected: virtual ~VCMPacketRequestCallback() {} }; // Callback used to inform the user of the the desired resolution // as subscribed by Media Optimization (Quality Modes) class VCMQMSettingsCallback { public: virtual WebRtc_Word32 SetVideoQMSettings(const WebRtc_UWord32 frameRate, const WebRtc_UWord32 width, const WebRtc_UWord32 height) = 0; protected: virtual ~VCMQMSettingsCallback() {} }; } // namespace webrtc #endif // WEBRTC_MODULES_INTERFACE_VIDEO_CODING_DEFINES_H_