Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / modules / video_coding / codecs / interface / video_codec_interface.h
index 9776479..da72feb 100644 (file)
 
 #include "webrtc/common_types.h"
 #include "webrtc/common_video/interface/i420_video_frame.h"
-#include "webrtc/common_video/interface/video_image.h"
 #include "webrtc/modules/interface/module_common_types.h"
 #include "webrtc/modules/video_coding/codecs/interface/video_error_codes.h"
-
 #include "webrtc/typedefs.h"
+#include "webrtc/video_decoder.h"
+#include "webrtc/video_encoder.h"
 
 namespace webrtc
 {
@@ -28,29 +28,44 @@ class RTPFragmentationHeader; // forward declaration
 
 // Note: if any pointers are added to this struct, it must be fitted
 // with a copy-constructor. See below.
-struct CodecSpecificInfoVP8
-{
-    bool             hasReceivedSLI;
-    uint8_t    pictureIdSLI;
-    bool             hasReceivedRPSI;
-    uint64_t   pictureIdRPSI;
-    int16_t    pictureId;         // negative value to skip pictureId
-    bool             nonReference;
-    uint8_t    simulcastIdx;
-    uint8_t    temporalIdx;
-    bool             layerSync;
-    int              tl0PicIdx;         // Negative value to skip tl0PicIdx
-    int8_t     keyIdx;            // negative value to skip keyIdx
+struct CodecSpecificInfoVP8 {
+  bool hasReceivedSLI;
+  uint8_t pictureIdSLI;
+  bool hasReceivedRPSI;
+  uint64_t pictureIdRPSI;
+  int16_t pictureId;  // Negative value to skip pictureId.
+  bool nonReference;
+  uint8_t simulcastIdx;
+  uint8_t temporalIdx;
+  bool layerSync;
+  int tl0PicIdx;  // Negative value to skip tl0PicIdx.
+  int8_t keyIdx;  // Negative value to skip keyIdx.
+};
+
+struct CodecSpecificInfoVP9 {
+  bool hasReceivedSLI;
+  uint8_t pictureIdSLI;
+  bool hasReceivedRPSI;
+  uint64_t pictureIdRPSI;
+  int16_t pictureId;  // Negative value to skip pictureId.
+  bool nonReference;
+  uint8_t temporalIdx;
+  bool layerSync;
+  int tl0PicIdx;  // Negative value to skip tl0PicIdx.
+  int8_t keyIdx;  // Negative value to skip keyIdx.
 };
 
 struct CodecSpecificInfoGeneric {
   uint8_t simulcast_idx;
 };
 
-union CodecSpecificInfoUnion
-{
-    CodecSpecificInfoGeneric   generic;
-    CodecSpecificInfoVP8       VP8;
+struct CodecSpecificInfoH264 {};
+
+union CodecSpecificInfoUnion {
+  CodecSpecificInfoGeneric generic;
+  CodecSpecificInfoVP8 VP8;
+  CodecSpecificInfoVP9 VP9;
+  CodecSpecificInfoH264 H264;
 };
 
 // Note: if any pointers are added to this struct or its sub-structs, it
@@ -62,196 +77,6 @@ struct CodecSpecificInfo
     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 int32_t
-    Encoded(EncodedImage& encodedImage,
-            const CodecSpecificInfo* codecSpecificInfo = NULL,
-            const RTPFragmentationHeader* fragmentation = NULL) = 0;
-};
-
-class VideoEncoder
-{
-public:
-    virtual ~VideoEncoder() {};
-
-    // 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 int32_t InitEncode(const VideoCodec* codecSettings, int32_t numberOfCores, uint32_t 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
-    //          - frame_types        : The frame type to encode
-    //
-    // Return value                 : WEBRTC_VIDEO_CODEC_OK if OK, < 0
-    //                                otherwise.
-    virtual int32_t Encode(
-        const I420VideoFrame& inputImage,
-        const CodecSpecificInfo* codecSpecificInfo,
-        const std::vector<VideoFrameType>* frame_types) = 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 int32_t RegisterEncodeCompleteCallback(EncodedImageCallback* callback) = 0;
-
-    // Free encoder memory.
-    //
-    // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
-    virtual int32_t Release() = 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)
-    //          - rtt              : Round-trip time in milliseconds
-    //
-    // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
-    virtual int32_t SetChannelParameters(uint32_t packetLoss, int rtt) = 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 int32_t SetRates(uint32_t newBitRate, uint32_t 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 int32_t 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 int32_t CodecConfigParameters(uint8_t* /*buffer*/, int32_t /*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 int32_t Decoded(I420VideoFrame& decodedImage) = 0;
-
-    virtual int32_t ReceivedDecodedReferenceFrame(const uint64_t pictureId) {return -1;}
-
-    virtual int32_t ReceivedDecodedFrame(const uint64_t 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 int32_t InitDecode(const VideoCodec* codecSettings, int32_t 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.
-    //          - fragmentation     : Specifies where the encoded frame can be
-    //                                split into separate fragments. The meaning
-    //                                of fragment is codec specific, but often
-    //                                means that each fragment is decodable by
-    //                                itself.
-    //          - 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 int32_t
-    Decode(const EncodedImage& inputImage,
-           bool missingFrames,
-           const RTPFragmentationHeader* fragmentation,
-           const CodecSpecificInfo* codecSpecificInfo = NULL,
-           int64_t 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 int32_t RegisterDecodeCompleteCallback(DecodedImageCallback* callback) = 0;
-
-    // Free decoder memory.
-    //
-    // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
-    virtual int32_t Release() = 0;
-
-    // Reset decoder state and prepare for a new call.
-    //
-    // Return value                : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
-    virtual int32_t 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 int32_t SetCodecConfigParameters(const uint8_t* /*buffer*/, int32_t /*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 // WEBRTC_MODULES_VIDEO_CODING_CODECS_INTERFACE_VIDEO_CODEC_INTERFACE_H