summaryrefslogtreecommitdiff
path: root/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include
diff options
context:
space:
mode:
Diffstat (limited to 'service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include')
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/IRtpSession.h11
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/ImsMediaDefine.h78
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h3
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioSession.h8
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtpTx.h8
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpDecoderNode.h9
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/nodes/RtpEncoderNode.h12
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h1
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;