diff options
author | bodamnam <bodamnam@google.com> | 2023-04-06 05:27:52 +0000 |
---|---|---|
committer | Bodam Nam <bodamnam@google.com> | 2023-04-06 14:50:55 +0000 |
commit | ac408fc4a5692535a2d10ba22a2cceb759e0eee5 (patch) | |
tree | e10f8490e397b8e27ac16008a98727f55b0ff6d9 | |
parent | 2a830cf2777b9275726f37b4155877759fe0044e (diff) | |
download | ImsMedia-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
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); } |