git-svn-id: http://webrtc.googlecode.com/svn/trunk@4 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
238
modules/video_coding/codecs/interface/video_codec_interface.h
Normal file
238
modules/video_coding/codecs/interface/video_codec_interface.h
Normal file
@@ -0,0 +1,238 @@
|
||||
/*
|
||||
* 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 VIDEO_CODEC_INTERFACE_H
|
||||
#define VIDEO_CODEC_INTERFACE_H
|
||||
|
||||
#include "common_types.h"
|
||||
#include "typedefs.h"
|
||||
#include "video_image.h"
|
||||
#include "video_error_codes.h"
|
||||
|
||||
namespace webrtc
|
||||
{
|
||||
|
||||
class RTPFragmentationHeader; // forward declaration
|
||||
|
||||
struct CodecSpecificInfoVP8
|
||||
{
|
||||
bool hasReceivedSLI;
|
||||
WebRtc_UWord8 pictureIdSLI;
|
||||
bool hasReceivedRPSI;
|
||||
WebRtc_UWord64 pictureIdRPSI;
|
||||
};
|
||||
|
||||
union CodecSpecificInfoUnion
|
||||
{
|
||||
CodecSpecificInfoVP8 VP8;
|
||||
};
|
||||
|
||||
struct CodecSpecificInfo
|
||||
{
|
||||
VideoCodecType codecType;
|
||||
CodecSpecificInfoUnion codecSpecific;
|
||||
};
|
||||
|
||||
class EncodedImageCallback
|
||||
{
|
||||
public:
|
||||
virtual ~EncodedImageCallback() {};
|
||||
|
||||
// Callback function which is called when an image has been encoded.
|
||||
//
|
||||
// Input:
|
||||
// - encodedImage : The encoded image
|
||||
//
|
||||
// Return value : > 0, signals to the caller that one or more future frames
|
||||
// should be dropped to keep bit rate or frame rate.
|
||||
// = 0, if OK.
|
||||
// < 0, on error.
|
||||
virtual WebRtc_Word32 Encoded(EncodedImage& encodedImage,
|
||||
const void* codecSpecificInfo = NULL,
|
||||
const RTPFragmentationHeader* fragmentation = NULL) = 0;
|
||||
};
|
||||
|
||||
class VideoEncoder
|
||||
{
|
||||
public:
|
||||
virtual ~VideoEncoder() {};
|
||||
|
||||
// Get the encoder version.
|
||||
//
|
||||
// Input:
|
||||
// - length : Length of the version buffer.
|
||||
//
|
||||
// Output:
|
||||
// - version : Buffer where the version string will be written.
|
||||
//
|
||||
// Return value : Number of bytes written to the version buffer.
|
||||
// < 0 on failure.
|
||||
virtual WebRtc_Word32 Version(WebRtc_Word8 *version, WebRtc_Word32 length) const = 0;
|
||||
|
||||
// Initialize the encoder with the information from the VideoCodec.
|
||||
//
|
||||
// Input:
|
||||
// - codecSettings : Codec settings
|
||||
// - numberOfCores : Number of cores available for the encoder
|
||||
// - maxPayloadSize : The maximum size each payload is allowed
|
||||
// to have. Usually MTU - overhead.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 InitEncode(const VideoCodec* codecSettings, WebRtc_Word32 numberOfCores, WebRtc_UWord32 maxPayloadSize) = 0;
|
||||
|
||||
// Encode an I420 image (as a part of a video stream). The encoded image
|
||||
// will be returned to the user through the encode complete callback.
|
||||
//
|
||||
// Input:
|
||||
// - inputImage : Image to be encoded
|
||||
// - codecSpecificInfo : Pointer to codec specific data
|
||||
// - frameType : The frame type to encode
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 Encode(const RawImage& inputImage,
|
||||
const void* codecSpecificInfo = NULL,
|
||||
VideoFrameType frameType = kDeltaFrame) = 0;
|
||||
|
||||
// Register an encode complete callback object.
|
||||
//
|
||||
// Input:
|
||||
// - callback : Callback object which handles encoded images.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 RegisterEncodeCompleteCallback(EncodedImageCallback* callback) = 0;
|
||||
|
||||
// Free encoder memory.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 Release() = 0;
|
||||
|
||||
// Reset encoder state and prepare for a new call.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 Reset() = 0;
|
||||
|
||||
// Inform the encoder about the packet loss and round trip time on the network
|
||||
// used to decide the best pattern and signaling.
|
||||
//
|
||||
// - packetLoss : Fraction lost
|
||||
// (loss rate in percent = 100 * packetLoss / 255)
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 SetPacketLoss(WebRtc_UWord32 packetLoss) = 0;
|
||||
|
||||
// Inform the encoder about the new target bit rate.
|
||||
//
|
||||
// - newBitRate : New target bit rate
|
||||
// - frameRate : The target frame rate
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 SetRates(WebRtc_UWord32 newBitRate, WebRtc_UWord32 frameRate) = 0;
|
||||
|
||||
// Use this function to enable or disable periodic key frames. Can be useful for codecs
|
||||
// which have other ways of stopping error propagation.
|
||||
//
|
||||
// - enable : Enable or disable periodic key frames
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 SetPeriodicKeyFrames(bool enable) { return WEBRTC_VIDEO_CODEC_ERROR; }
|
||||
|
||||
// Codec configuration data to send out-of-band, i.e. in SIP call setup
|
||||
//
|
||||
// - buffer : Buffer pointer to where the configuration data
|
||||
// should be stored
|
||||
// - size : The size of the buffer in bytes
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 CodecConfigParameters(WebRtc_UWord8* /*buffer*/, WebRtc_Word32 /*size*/) { return WEBRTC_VIDEO_CODEC_ERROR; }
|
||||
};
|
||||
|
||||
class DecodedImageCallback
|
||||
{
|
||||
public:
|
||||
virtual ~DecodedImageCallback() {};
|
||||
|
||||
// Callback function which is called when an image has been decoded.
|
||||
//
|
||||
// Input:
|
||||
// - decodedImage : The decoded image
|
||||
//
|
||||
// Return value : 0 if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 Decoded(RawImage& decodedImage) = 0;
|
||||
|
||||
virtual WebRtc_Word32 ReceivedDecodedReferenceFrame(const WebRtc_UWord64 pictureId) {return -1;}
|
||||
|
||||
virtual WebRtc_Word32 ReceivedDecodedFrame(const WebRtc_UWord64 pictureId) {return -1;}
|
||||
};
|
||||
|
||||
class VideoDecoder
|
||||
{
|
||||
public:
|
||||
virtual ~VideoDecoder() {};
|
||||
|
||||
// Initialize the decoder with the information from the VideoCodec.
|
||||
//
|
||||
// Input:
|
||||
// - inst : Codec settings
|
||||
// - numberOfCores : Number of cores available for the decoder
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 InitDecode(const VideoCodec* codecSettings, WebRtc_Word32 numberOfCores) = 0;
|
||||
|
||||
// Decode encoded image (as a part of a video stream). The decoded image
|
||||
// will be returned to the user through the decode complete callback.
|
||||
//
|
||||
// Input:
|
||||
// - inputImage : Encoded image to be decoded
|
||||
// - missingFrames : True if one or more frames have been lost
|
||||
// since the previous decode call.
|
||||
// - codecSpecificInfo : Pointer to codec specific data
|
||||
// - renderTimeMs : System time to render in milliseconds. Only
|
||||
// used by decoders with internal rendering.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 Decode(const EncodedImage& inputImage, bool missingFrames, const void* codecSpecificInfo = NULL, WebRtc_Word64 renderTimeMs = -1) = 0;
|
||||
|
||||
// Register an decode complete callback object.
|
||||
//
|
||||
// Input:
|
||||
// - callback : Callback object which handles decoded images.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 RegisterDecodeCompleteCallback(DecodedImageCallback* callback) = 0;
|
||||
|
||||
// Free decoder memory.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 Release() = 0;
|
||||
|
||||
// Reset decoder state and prepare for a new call.
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 Reset() = 0;
|
||||
|
||||
// Codec configuration data sent out-of-band, i.e. in SIP call setup
|
||||
//
|
||||
// Input/Output:
|
||||
// - buffer : Buffer pointer to the configuration data
|
||||
// - size : The size of the configuration data in
|
||||
// bytes
|
||||
//
|
||||
// Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
|
||||
virtual WebRtc_Word32 SetCodecConfigParameters(const WebRtc_UWord8* /*buffer*/, WebRtc_Word32 /*size*/) { return WEBRTC_VIDEO_CODEC_ERROR; }
|
||||
|
||||
// Create a copy of the codec and its internal state.
|
||||
//
|
||||
// Return value : A copy of the instance if OK, NULL otherwise.
|
||||
virtual VideoDecoder* Copy() { return NULL; }
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // VIDEO_CODEC_INTERFACE_H
|
29
modules/video_coding/codecs/interface/video_error_codes.h
Normal file
29
modules/video_coding/codecs/interface/video_error_codes.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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 VIDEO_ERROR_CODES_H
|
||||
#define VIDEO_ERROR_CODES_H
|
||||
|
||||
// NOTE: in sync with video_coding_module_defines.h
|
||||
|
||||
// Define return values
|
||||
|
||||
#define WEBRTC_VIDEO_CODEC_REQUEST_SLI 2
|
||||
#define WEBRTC_VIDEO_CODEC_OK 0
|
||||
#define WEBRTC_VIDEO_CODEC_ERROR -1
|
||||
#define WEBRTC_VIDEO_CODEC_LEVEL_EXCEEDED -2
|
||||
#define WEBRTC_VIDEO_CODEC_MEMORY -3
|
||||
#define WEBRTC_VIDEO_CODEC_ERR_PARAMETER -4
|
||||
#define WEBRTC_VIDEO_CODEC_ERR_SIZE -5
|
||||
#define WEBRTC_VIDEO_CODEC_TIMEOUT -6
|
||||
#define WEBRTC_VIDEO_CODEC_UNINITIALIZED -7
|
||||
#define WEBRTC_VIDEO_CODEC_ERR_REQUEST_SLI -12
|
||||
|
||||
#endif // VIDEO_ERROR_CODES_H
|
75
modules/video_coding/codecs/interface/video_image.h
Normal file
75
modules/video_coding/codecs/interface/video_image.h
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* 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 VIDEO_IMAGE_H
|
||||
#define VIDEO_IMAGE_H
|
||||
|
||||
#include "typedefs.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
namespace webrtc
|
||||
{
|
||||
|
||||
enum VideoFrameType
|
||||
{
|
||||
kKeyFrame = 0,
|
||||
kDeltaFrame = 1,
|
||||
kGoldenFrame = 2,
|
||||
kAltRefFrame = 3,
|
||||
kSkipFrame = 4
|
||||
};
|
||||
|
||||
class RawImage
|
||||
{
|
||||
public:
|
||||
RawImage() : _width(0), _height(0), _timeStamp(0), _buffer(NULL),
|
||||
_length(0), _size(0) {}
|
||||
|
||||
RawImage(WebRtc_UWord8* buffer, WebRtc_UWord32 length,
|
||||
WebRtc_UWord32 size) :
|
||||
_width(0), _height(0), _timeStamp(0),
|
||||
_buffer(buffer), _length(length), _size(size) {}
|
||||
|
||||
WebRtc_UWord32 _width;
|
||||
WebRtc_UWord32 _height;
|
||||
WebRtc_UWord32 _timeStamp;
|
||||
WebRtc_UWord8* _buffer;
|
||||
WebRtc_UWord32 _length;
|
||||
WebRtc_UWord32 _size;
|
||||
};
|
||||
|
||||
class EncodedImage
|
||||
{
|
||||
public:
|
||||
EncodedImage() :
|
||||
_encodedWidth(0), _encodedHeight(0), _timeStamp(0),
|
||||
_frameType(kDeltaFrame), _buffer(NULL), _length(0), _size(0),
|
||||
_completeFrame(false) {}
|
||||
|
||||
EncodedImage(WebRtc_UWord8* buffer,
|
||||
WebRtc_UWord32 length,
|
||||
WebRtc_UWord32 size) :
|
||||
_encodedWidth(0), _encodedHeight(0), _timeStamp(0),
|
||||
_frameType(kDeltaFrame), _buffer(buffer), _length(length),
|
||||
_size(size), _completeFrame(false) {}
|
||||
|
||||
WebRtc_UWord32 _encodedWidth;
|
||||
WebRtc_UWord32 _encodedHeight;
|
||||
WebRtc_UWord32 _timeStamp;
|
||||
VideoFrameType _frameType;
|
||||
WebRtc_UWord8* _buffer;
|
||||
WebRtc_UWord32 _length;
|
||||
WebRtc_UWord32 _size;
|
||||
bool _completeFrame;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // VIDEO_IMAGE_H
|
Reference in New Issue
Block a user