192 lines
5.7 KiB
C++
192 lines
5.7 KiB
C++
/*
|
|
* 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_
|