239 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			9.2 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 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
 | 
