diff options
Diffstat (limited to 'service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include')
8 files changed, 102 insertions, 28 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/IRtpSession.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/IRtpSession.h index bb667867..3075dd4d 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/IRtpSession.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/IRtpSession.h @@ -55,9 +55,9 @@ class IRtpDecoderListener public: IRtpDecoderListener() {} virtual ~IRtpDecoderListener() {} - virtual void OnMediaDataInd(unsigned char* pData, uint32_t nDataSize, uint32_t nTimestamp, - bool bMark, uint16_t nSeqNum, uint32_t nPayloadType, uint32_t nSSRC, bool bExtension, - uint16_t nExtensionData) = 0; + virtual void OnMediaDataInd(unsigned char* data, uint32_t dataSize, uint32_t timestamp, + bool mark, uint16_t seqNum, uint32_t payloadType, uint32_t ssrc, + const RtpHeaderExtensionInfo& extensionInfo) = 0; virtual void OnNumReceivedPacket(uint32_t nNumRtpPacket) = 0; }; @@ -103,9 +103,8 @@ public: void StopRtp(); void StartRtcp(bool bSendRtcpBye = false); void StopRtcp(); - bool SendRtpPacket(uint32_t nPayloadType, uint8_t* pData, uint32_t nDataSize, - uint32_t timestamp, bool mark, uint32_t nTimeDiff, bool bExtension = false, - tRtpHeaderExtensionInfo* pExtensionInfo = nullptr); + bool SendRtpPacket(uint32_t payloadType, uint8_t* data, uint32_t dataSize, uint32_t timestamp, + bool mark, uint32_t nTimeDiff, RtpHeaderExtensionInfo* extensionInfo = nullptr); bool ProcRtpPacket(uint8_t* pData, uint32_t nDataSize); bool ProcRtcpPacket(uint8_t* pData, uint32_t nDataSize); void OnTimer(); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/ImsMediaDefine.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/ImsMediaDefine.h index 9006f64d..a445059e 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/ImsMediaDefine.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/ImsMediaDefine.h @@ -30,6 +30,7 @@ #define USHORT_TS_ROUND_COMPARE(a, b) \ (((a) >= (b) && (b) >= TS_ROUND_QUARD) || ((a) <= 0xffff - TS_ROUND_QUARD) || \ ((a) <= TS_ROUND_QUARD && (b) >= 0xffff - TS_ROUND_QUARD)) +#define IMS_MEDIA_WORD_SIZE 4 using namespace android::telephony::imsmedia; @@ -293,7 +294,7 @@ enum ImsMediaAudioMsgRequest kAudioDeleteConfig, kAudioConfirmConfig, kAudioSendDtmf, - kAudioSendHeaderExtension, + kAudioSendRtpHeaderExtension, kAudioSetMediaQualityThreshold, }; @@ -320,7 +321,7 @@ enum ImsMediaVideoMsgRequest kVideoModifySession, kVideoSetPreviewSurface, kVideoSetDisplaySurface, - kVideoSendHeaderExtension, + kVideoSendRtpHeaderExtension, kVideoSetMediaQualityThreshold, kVideoRequestDataUsage, }; @@ -550,28 +551,77 @@ public: uint32_t option; }; -struct tRtpHeaderExtensionInfo +struct RtpHeaderExtensionInfo { - uint16_t nDefinedByProfile; - uint16_t nLength; - uint16_t nExtensionData; - tRtpHeaderExtensionInfo(uint16_t profile = 0, uint16_t length = 0, uint16_t data = 0) +public: + enum + { + // RFC 8285#section-4.2, The bit pattern for one byte header + kBitPatternForOneByteHeader = 0xBEDE, + // RFC 8285#section-4.3, The bit pattern for two byte header + kBitPatternForTwoByteHeader = 0x1000, + }; + + uint16_t definedByProfile; + uint16_t length; // length in word unit + int8_t* extensionData; + uint16_t extensionDataSize; + + RtpHeaderExtensionInfo( + uint16_t profile = 0, uint16_t len = 0, int8_t* data = nullptr, uint16_t size = 0) + { + definedByProfile = profile; + length = len; + extensionData = nullptr; + extensionDataSize = 0; + setExtensionData(data, size); + } + + RtpHeaderExtensionInfo(const RtpHeaderExtensionInfo& extension) { - nDefinedByProfile = profile; - nLength = length; - nExtensionData = data; + definedByProfile = extension.definedByProfile; + extensionData = nullptr; + length = extension.length; + setExtensionData(extension.extensionData, extension.extensionDataSize); } - tRtpHeaderExtensionInfo& operator=(const tRtpHeaderExtensionInfo& extension) + + ~RtpHeaderExtensionInfo() + { + if (extensionData != nullptr) + { + delete[] extensionData; + extensionData = nullptr; + } + } + + RtpHeaderExtensionInfo& operator=(const RtpHeaderExtensionInfo& extension) { if (this != &extension) { - nDefinedByProfile = extension.nDefinedByProfile; - nLength = extension.nLength; - nExtensionData = extension.nExtensionData; + definedByProfile = extension.definedByProfile; + length = extension.length; + setExtensionData(extension.extensionData, extension.extensionDataSize); } return *this; } + + void setExtensionData(int8_t* data, uint16_t dataSize) + { + if (extensionData != nullptr) + { + delete[] extensionData; + extensionData = nullptr; + extensionDataSize = 0; + } + + if (data != nullptr) + { + extensionDataSize = dataSize; + extensionData = new int8_t[extensionDataSize]; + memcpy(extensionData, data, extensionDataSize); + } + } }; #define MAX_IP_LEN 128 diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h index a7b69c63..231b4141 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h @@ -23,6 +23,7 @@ #include <AudioSession.h> #include <AudioConfig.h> #include <MediaQualityThreshold.h> +#include <RtpHeaderExtension.h> #include <unordered_map> using namespace std; @@ -74,7 +75,7 @@ private: ImsMediaResult deleteConfig(int sessionId, AudioConfig* config); ImsMediaResult confirmConfig(int sessionId, AudioConfig* config); void sendDtmf(int sessionId, char dtmfDigit, int duration); - // void sendHeaderExtension(int sessionId, RtpHeaderExtension* data); + void sendRtpHeaderExtension(int sessionId, std::list<RtpHeaderExtension>* listExtension); void setMediaQualityThreshold(int sessionId, MediaQualityThreshold* threshold); static AudioManager* sManager; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioSession.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioSession.h index 10d8b916..ac29bfde 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioSession.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioSession.h @@ -24,6 +24,7 @@ #include <AudioStreamGraphRtcp.h> #include <RtpConfig.h> #include <MediaQualityAnalyzer.h> +#include <RtpHeaderExtension.h> #include <list> class AudioSession : public BaseSession @@ -103,6 +104,13 @@ public: */ uint32_t getGraphSize(ImsMediaStreamType type); + /** + * @brief Send rtp header extension to the audio rtp + * + * @param listExtension The list of rtp header extension data + */ + void sendRtpHeaderExtension(std::list<RtpHeaderExtension>* listExtension); + private: std::list<AudioStreamGraphRtpTx*> mListGraphRtpTx; std::list<AudioStreamGraphRtpRx*> mListGraphRtpRx; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h index 753774f1..0e9f00d6 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h @@ -19,6 +19,7 @@ #include <ImsMediaDefine.h> #include <AudioStreamGraph.h> +#include <RtpHeaderExtension.h> class AudioStreamGraphRtpTx : public AudioStreamGraph { @@ -57,6 +58,13 @@ public: */ void processCmr(const uint32_t cmr); + /** + * @brief Send rtp header extension to the audio rtp + * + * @param listExtension The list of rtp header extension data + */ + void sendRtpHeaderExtension(std::list<RtpHeaderExtension>* listExtension); + private: std::list<BaseNode*> mListDtmfNodes; }; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpDecoderNode.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpDecoderNode.h index cf285891..efa933e6 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpDecoderNode.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpDecoderNode.h @@ -19,6 +19,7 @@ #include <BaseNode.h> #include <IRtpSession.h> +#include <RtpHeaderExtension.h> // #define DEBUG_JITTER_GEN_SIMULATION_DELAY // #define DEBUG_JITTER_GEN_SIMULATION_REORDER @@ -46,9 +47,9 @@ public: virtual void OnDataFromFrontNode(ImsMediaSubType subtype, uint8_t* pData, uint32_t nDataSize, uint32_t timestamp, bool mark, uint32_t nSeqNum, ImsMediaSubType nDataType, uint32_t arrivalTime = 0); - virtual void OnMediaDataInd(unsigned char* pData, uint32_t nDataSize, uint32_t timestamp, - bool mark, uint16_t nSeqNum, uint32_t nPayloadType, uint32_t nSSRC, bool bExtension, - uint16_t nExtensionData); + virtual void OnMediaDataInd(unsigned char* data, uint32_t dataSize, uint32_t timestamp, + bool mark, uint16_t seqNum, uint32_t payloadType, uint32_t ssrc, + const RtpHeaderExtensionInfo& extensionInfo); // IRtpDecoderListener virtual void OnNumReceivedPacket(uint32_t nNumRtpPacket); @@ -69,6 +70,8 @@ public: private: void processDtmf(uint8_t* data); + std::list<RtpHeaderExtension>* DecodeRtpHeaderExtension( + const RtpHeaderExtensionInfo& extensionInfo); IRtpSession* mRtpSession; RtpAddress mLocalAddress; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h index 788f227e..54253073 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h @@ -19,6 +19,7 @@ #include <BaseNode.h> #include <IRtpSession.h> +#include <RtpHeaderExtension.h> #include <mutex> class RtpEncoderNode : public BaseNode, public IRtpEncoderListener @@ -49,13 +50,18 @@ public: /** * @brief Set the camera facing and device orientation parameter for cvo extension in rtp header + * + * @param facing The facing of camera define in kCameraFacing in ImsMediaVideoUtil.h + * @param orientation The orientation value to send in degree unit + * @return true Return true when the extension data set properly + * @return false Return false when the cvo configuration is disabled */ bool SetCvoExtension(const int64_t facing, const int64_t orientation); /** - * @brief Set the rtp header extension parameter + * @brief Convert list of the RtpHeaderExtension to Rtp header extension payload */ - void SetRtpHeaderExtension(tRtpHeaderExtensionInfo& tExtension); + void SetRtpHeaderExtension(std::list<RtpHeaderExtension>* listExtension); private: bool ProcessAudioData(ImsMediaSubType subtype, uint8_t* pData, uint32_t nDataSize); @@ -80,7 +86,7 @@ private: int32_t mCvoValue; int8_t mRedundantPayload; int8_t mRedundantLevel; - tRtpHeaderExtensionInfo mRtpExtension; + std::list<RtpHeaderExtensionInfo> mListRtpExtension; }; #endif diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h index 6095335c..7c780fd0 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h @@ -98,7 +98,6 @@ private: ImsMediaResult setPreviewSurfaceToSession(const int sessionId, ANativeWindow* surface); ImsMediaResult setDisplaySurfaceToSession(const int sessionId, ANativeWindow* surface); ImsMediaResult modifySession(const int sessionId, VideoConfig* config); - // void sendHeaderExtension(int sessionId, RtpHeaderExtension* data); void setMediaQualityThreshold(const int sessionId, MediaQualityThreshold* threshold); static VideoManager* manager; |