summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbodamnam <bodamnam@google.com>2023-04-06 05:27:52 +0000
committerBodam Nam <bodamnam@google.com>2023-04-06 14:50:55 +0000
commitac408fc4a5692535a2d10ba22a2cceb759e0eee5 (patch)
treee10f8490e397b8e27ac16008a98727f55b0ff6d9
parent2a830cf2777b9275726f37b4155877759fe0044e (diff)
downloadImsMedia-ac408fc4a5692535a2d10ba22a2cceb759e0eee5.tar.gz
Fix the video resolution was changing continuously due to the subtype being updated to undefined
This CL also fixes CVO operation was not working due to the incorrect list logic in the SetCvoExtension method in RtpEncoderNode Bug: 242261687 Test: atest ImsMediaNativeTests, Verified with VZW TC RCS 2.27, Video Call simulation test using ImsMediaTestingApp to verify the CVO operation Change-Id: I42b8a676d4face581ccfa8d68900cc035c987cf8
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp15
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/nodes/IVideoRendererNode.cpp39
2 files changed, 32 insertions, 22 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp
index 71903254..944af956 100644
--- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp
+++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/nodes/RtpEncoderNode.cpp
@@ -337,6 +337,7 @@ bool RtpEncoderNode::SetCvoExtension(const int64_t facing, const int64_t orienta
extensionData[2] = 0; // padding
extensionData[3] = 0; // padding
+ mListRtpExtension.clear();
mListRtpExtension.push_back(RtpHeaderExtensionInfo(
RtpHeaderExtensionInfo::kBitPatternForOneByteHeader, 1, extensionData, 4));
return true;
@@ -522,8 +523,18 @@ bool RtpEncoderNode::ProcessAudioData(ImsMediaSubType subtype, uint8_t* data, ui
void RtpEncoderNode::ProcessVideoData(
ImsMediaSubType subtype, uint8_t* data, uint32_t size, uint32_t timestamp, bool mark)
{
- IMLOGD_PACKET2(
- IM_PACKET_LOG_RTP, "[ProcessVideoData] nSize[%d], timestamp[%u]", size, timestamp);
+ IMLOGD_PACKET4(IM_PACKET_LOG_RTP, "[ProcessVideoData] subtype[%d], size[%d], TS[%u], mark[%d]",
+ subtype, size, timestamp, mark);
+
+#ifdef SIMULATE_VIDEO_CVO_UPDATE
+ const int64_t kCameraFacing = kCameraFacingFront;
+ static int64_t sDeviceOrientation = 0;
+ static int64_t sCount = 0;
+ if ((++sCount % 100) == 0)
+ {
+ SetCvoExtension(kCameraFacing, (sDeviceOrientation += 90) % 360);
+ }
+#endif
if (mCvoValue > 0 && mark && subtype == MEDIASUBTYPE_VIDEO_IDR_FRAME)
{
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/nodes/IVideoRendererNode.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/nodes/IVideoRendererNode.cpp
index 88713fd1..0f5a158f 100644
--- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/nodes/IVideoRendererNode.cpp
+++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/nodes/IVideoRendererNode.cpp
@@ -87,7 +87,7 @@ ImsMediaResult IVideoRendererNode::Start()
mVideoRenderer->SetDeviceOrientation(mDeviceOrientation);
mVideoRenderer->SetSurface(mWindow);
- if (mVideoRenderer->Start() == false)
+ if (!mVideoRenderer->Start())
{
return RESULT_NOT_READY;
}
@@ -224,7 +224,7 @@ void IVideoRendererNode::ProcessData()
// check Config String for updating config frame
nBufferOffset = 0;
if ((mCodecType == kVideoCodecHevc || mCodecType == kVideoCodecAvc) &&
- IsConfigFrame(pDataBuff, nDatabufferSize, &nBufferOffset) == true)
+ IsConfigFrame(pDataBuff, nDatabufferSize, &nBufferOffset))
{
SaveConfigFrame(pDataBuff + nBufferOffset, nDatabufferSize - nBufferOffset, kConfigSps);
SaveConfigFrame(pDataBuff + nBufferOffset, nDatabufferSize - nBufferOffset, kConfigPps);
@@ -234,7 +234,7 @@ void IVideoRendererNode::ProcessData()
SaveConfigFrame(pDataBuff + nBufferOffset, nDatabufferSize - nBufferOffset, kConfigVps);
}
- if (IsSps(pDataBuff, nDatabufferSize, &nBufferOffset) == true)
+ if (IsSps(pDataBuff, nDatabufferSize, &nBufferOffset))
{
IMLOGD_PACKET1(
IM_PACKET_LOG_VIDEO, "[ProcessData] parse SPS - nOffset[%d]", nBufferOffset);
@@ -243,7 +243,7 @@ void IVideoRendererNode::ProcessData()
if (mCodecType == kVideoCodecAvc)
{
if (ImsMediaVideoUtil::ParseAvcSps(pDataBuff + nBufferOffset,
- nDatabufferSize - nBufferOffset, &codecConfig) == true)
+ nDatabufferSize - nBufferOffset, &codecConfig))
{
CheckResolution(codecConfig.nWidth, codecConfig.nHeight);
}
@@ -251,7 +251,7 @@ void IVideoRendererNode::ProcessData()
else if (mCodecType == kVideoCodecHevc)
{
if (ImsMediaVideoUtil::ParseHevcSps(pDataBuff + nBufferOffset,
- nDatabufferSize - nBufferOffset, &codecConfig) == true)
+ nDatabufferSize - nBufferOffset, &codecConfig))
{
CheckResolution(codecConfig.nWidth, codecConfig.nHeight);
}
@@ -289,7 +289,7 @@ void IVideoRendererNode::ProcessData()
}
}
- if (mFirstFrame == false)
+ if (!mFirstFrame)
{
IMLOGD0("[ProcessData] notify first frame");
mFirstFrame = true;
@@ -308,7 +308,8 @@ void IVideoRendererNode::ProcessData()
subtype = MEDIASUBTYPE_ROT0;
}
- if (mSubtype != subtype)
+ // rotation changed
+ if (mSubtype != subtype && (subtype >= MEDIASUBTYPE_ROT0 && subtype <= MEDIASUBTYPE_ROT270))
{
mSubtype = subtype;
int degree = 0;
@@ -610,18 +611,17 @@ void IVideoRendererNode::SaveConfigFrame(uint8_t* pbBuffer, uint32_t nBufferSize
if (nCurrBuff[0] == 0x00 && nCurrBuff[1] == 0x00 && nCurrBuff[2] == 0x00 &&
nCurrBuff[3] == 0x01)
{
- if (eMode == kConfigSps && bSPSString == false && ((nCurrBuff[4] & 0x1F) == 7))
+ if (eMode == kConfigSps && !bSPSString && ((nCurrBuff[4] & 0x1F) == 7))
{
nOffset = nCurrSize;
bSPSString = true;
}
- else if (eMode == kConfigPps && bPPSString == false &&
- ((nCurrBuff[4] & 0x1F) == 8))
+ else if (eMode == kConfigPps && !bPPSString && ((nCurrBuff[4] & 0x1F) == 8))
{
nOffset = nCurrSize;
bPPSString = true;
}
- else if (bSPSString == true || bPPSString == true)
+ else if (bSPSString || bPPSString)
{
nConfigSize = nCurrSize - nOffset;
break;
@@ -684,21 +684,20 @@ void IVideoRendererNode::SaveConfigFrame(uint8_t* pbBuffer, uint32_t nBufferSize
if (nCurrBuff[0] == 0x00 && nCurrBuff[1] == 0x00 && nCurrBuff[2] == 0x00 &&
nCurrBuff[3] == 0x01)
{
- if (eMode == kConfigVps && bVPSString == false &&
- (((nCurrBuff[4] >> 1) & 0x3F) == 32))
+ if (eMode == kConfigVps && !bVPSString && (((nCurrBuff[4] >> 1) & 0x3F) == 32))
{
nOffset = nCurrSize;
bVPSString = true;
break;
}
- else if (eMode == kConfigSps && bSPSString == false &&
+ else if (eMode == kConfigSps && !bSPSString &&
(((nCurrBuff[4] >> 1) & 0x3F) == 33))
{
nOffset = nCurrSize;
bSPSString = true;
break;
}
- else if (eMode == kConfigPps && bPPSString == false &&
+ else if (eMode == kConfigPps && !bPPSString &&
(((nCurrBuff[4] >> 1) & 0x3F) == 34))
{
nOffset = nCurrSize;
@@ -711,7 +710,7 @@ void IVideoRendererNode::SaveConfigFrame(uint8_t* pbBuffer, uint32_t nBufferSize
nCurrSize++;
}
- if (bVPSString == true || bSPSString == true || bPPSString == true)
+ if (bVPSString || bSPSString || bPPSString)
{
if ((nBufferSize - nOffset) > 0)
{
@@ -783,7 +782,7 @@ bool IVideoRendererNode::RemoveAUDNalUnit(
while (nCurrSize >= 5 && nCnt <= 12)
{
- if (bAUDUnit == true &&
+ if (bAUDUnit &&
(nCurrBuff[0] == 0x00 && nCurrBuff[1] == 0x00 && nCurrBuff[2] == 0x00 &&
nCurrBuff[3] == 0x01))
{
@@ -869,7 +868,7 @@ void IVideoRendererNode::NotifyPeerDimensionChanged()
{
mCallback->SendEvent(kImsMediaEventResolutionChanged, mWidth, mHeight);
}
- else
+ else if (mSubtype == MEDIASUBTYPE_ROT90 || mSubtype == MEDIASUBTYPE_ROT270)
{
mCallback->SendEvent(kImsMediaEventResolutionChanged, mHeight, mWidth);
}
@@ -881,7 +880,7 @@ void IVideoRendererNode::NotifyPeerDimensionChanged()
{
mCallback->SendEvent(kImsMediaEventResolutionChanged, mHeight, mWidth);
}
- else
+ else if (mSubtype == MEDIASUBTYPE_ROT90 || mSubtype == MEDIASUBTYPE_ROT270)
{
mCallback->SendEvent(kImsMediaEventResolutionChanged, mWidth, mHeight);
}
@@ -894,7 +893,7 @@ void IVideoRendererNode::NotifyPeerDimensionChanged()
{
mCallback->SendEvent(kImsMediaEventResolutionChanged, mWidth, mHeight);
}
- else
+ else if (mSubtype == MEDIASUBTYPE_ROT90 || mSubtype == MEDIASUBTYPE_ROT270)
{
mCallback->SendEvent(kImsMediaEventResolutionChanged, mHeight, mWidth);
}