diff options
17 files changed, 131 insertions, 67 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/StreamScheduler.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/StreamScheduler.cpp index e3a59796..9184212c 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/StreamScheduler.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/StreamScheduler.cpp @@ -19,11 +19,12 @@ #include <stdint.h> #include <chrono> #include <thread> +#include <algorithm> using namespace std::chrono; -#define RUN_WAIT_TIMEOUT 6 -#define STOP_WAIT_TIMEOUT 1000 +#define RUN_WAIT_TIMEOUT_MS 1 +#define STOP_WAIT_TIMEOUT_MS 1000 StreamScheduler::StreamScheduler() {} @@ -85,7 +86,7 @@ void StreamScheduler::Stop() { StopThread(); Awake(); - mConditionExit.wait_timeout(STOP_WAIT_TIMEOUT); + mConditionExit.wait_timeout(STOP_WAIT_TIMEOUT_MS); } IMLOGD1("[Stop] [%p] exit", this); @@ -96,63 +97,48 @@ void StreamScheduler::Awake() mConditionMain.signal(); } -BaseNode* StreamScheduler::DetermineProcessingNode() +void StreamScheduler::RunRegisteredNode() { - if (IsThreadStopped()) - { - return nullptr; - } - - BaseNode* pRetNode = nullptr; - uint32_t nMaxDataInNode = 0; + // the list to contain non-source type node + std::list<BaseNode*> listNodesToRun; for (auto& node : mlistRegisteredNode) { - if (node != nullptr && !node->IsRunTime() && !node->IsSourceNode()) + if (node != nullptr && node->GetState() == kNodeStateRunning && !node->IsRunTime()) { - uint32_t nDataInNode = node->GetDataCount(); - - if (nDataInNode > 0 && nDataInNode >= nMaxDataInNode) + if (node->IsSourceNode()) // process the source node { - pRetNode = node; - nMaxDataInNode = nDataInNode; + node->ProcessData(); + } + else if (node->GetDataCount() > 0) + { + listNodesToRun.push_back(node); // store node to run } } } - return pRetNode; -} - -void StreamScheduler::RunRegisteredNode() -{ - // run source nodes - for (auto& node : mlistRegisteredNode) - { - if (node != nullptr && node->GetState() == kNodeStateRunning && !node->IsRunTime() && - node->IsSourceNode()) - { - node->ProcessData(); - } - } - - for (;;) + while (!listNodesToRun.empty()) { - BaseNode* pNode = DetermineProcessingNode(); - - if (pNode == nullptr) + std::list<BaseNode*>::iterator maxNode = + std::max_element(listNodesToRun.begin(), listNodesToRun.end(), + [=](BaseNode* a, BaseNode* b) + { + return a->GetDataCount() < b->GetDataCount(); + }); + + if (maxNode == listNodesToRun.end()) { break; } - if (pNode->GetState() == kNodeStateRunning) - { - pNode->ProcessData(); - } + (*maxNode)->ProcessData(); // process the non runtime node if (IsThreadStopped()) { break; } + + listNodesToRun.remove(*maxNode); }; } @@ -188,10 +174,10 @@ void* StreamScheduler::run() break; } - mConditionMain.wait_timeout(RUN_WAIT_TIMEOUT / 2); + mConditionMain.wait_timeout(RUN_WAIT_TIMEOUT_MS); } mConditionExit.signal(); IMLOGD1("[run] [%p] exit", this); return nullptr; -} +}
\ No newline at end of file diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtcp.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtcp.cpp index e238f068..fa42bffd 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtcp.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtcp.cpp @@ -92,7 +92,7 @@ ImsMediaResult AudioStreamGraphRtcp::update(RtpConfig* config) if (*reinterpret_cast<AudioConfig*>(mConfig) == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } @@ -104,7 +104,7 @@ ImsMediaResult AudioStreamGraphRtcp::update(RtpConfig* config) if (mConfig->getMediaDirection() == RtpConfig::MEDIA_DIRECTION_NO_FLOW) { - IMLOGD0("[update] pause RTCP"); + IMLOGI0("[update] pause RTCP"); return stop(); } @@ -138,6 +138,22 @@ ImsMediaResult AudioStreamGraphRtcp::update(RtpConfig* config) return ret; } +ImsMediaResult AudioStreamGraphRtcp::start() +{ + if (mConfig == nullptr) + { + return RESULT_NOT_READY; + } + + if (mConfig->getMediaDirection() != RtpConfig::MEDIA_DIRECTION_NO_FLOW) + { + return BaseStreamGraph::start(); + } + + // not started + return RESULT_SUCCESS; +} + bool AudioStreamGraphRtcp::OnEvent(int32_t type, uint64_t param1, uint64_t param2) { IMLOGI3("[onEvent] type[%d], param1[%d], param2[%d]", type, param1, param2); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpRx.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpRx.cpp index 70963147..233284f5 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpRx.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpRx.cpp @@ -88,7 +88,7 @@ ImsMediaResult AudioStreamGraphRtpRx::update(RtpConfig* config) if (*mConfig == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp index ae8624a5..f797c117 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioStreamGraphRtpTx.cpp @@ -95,7 +95,7 @@ ImsMediaResult AudioStreamGraphRtpTx::update(RtpConfig* config) if (*reinterpret_cast<AudioConfig*>(mConfig) == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/StreamScheduler.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/StreamScheduler.h index b083096a..f9612c5d 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/StreamScheduler.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/StreamScheduler.h @@ -37,7 +37,6 @@ public: virtual void* run(); private: - BaseNode* DetermineProcessingNode(); void RunRegisteredNode(); std::list<BaseNode*> mlistRegisteredNode; ImsMediaCondition mConditionMain; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtcp.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtcp.h index 9691826c..7253b035 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtcp.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioStreamGraphRtcp.h @@ -27,6 +27,7 @@ public: virtual ~AudioStreamGraphRtcp(); virtual ImsMediaResult create(RtpConfig* config); virtual ImsMediaResult update(RtpConfig* config); + virtual ImsMediaResult start(); virtual bool OnEvent(int32_t type, uint64_t param1, uint64_t param2); }; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextStreamGraphRtcp.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextStreamGraphRtcp.h index 9832f036..2e5155a1 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextStreamGraphRtcp.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextStreamGraphRtcp.h @@ -27,6 +27,7 @@ public: virtual ~TextStreamGraphRtcp(); virtual ImsMediaResult create(RtpConfig* config); virtual ImsMediaResult update(RtpConfig* config); + virtual ImsMediaResult start(); virtual bool setMediaQualityThreshold(MediaQualityThreshold* threshold); }; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoStreamGraphRtcp.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoStreamGraphRtcp.h index 2ef9a5b6..f1c6d013 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoStreamGraphRtcp.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoStreamGraphRtcp.h @@ -27,6 +27,7 @@ public: virtual ~VideoStreamGraphRtcp(); virtual ImsMediaResult create(RtpConfig* config); virtual ImsMediaResult update(RtpConfig* config); + virtual ImsMediaResult start(); virtual bool setMediaQualityThreshold(MediaQualityThreshold* threshold); virtual bool OnEvent(int32_t type, uint64_t param1, uint64_t param2); }; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcp.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcp.cpp index 922981e6..db36beda 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcp.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcp.cpp @@ -94,7 +94,7 @@ ImsMediaResult TextStreamGraphRtcp::update(RtpConfig* config) if (*mConfig == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } @@ -105,7 +105,7 @@ ImsMediaResult TextStreamGraphRtcp::update(RtpConfig* config) mConfig = new TextConfig(pConfig); - if (mConfig->getRtcpConfig().getIntervalSec() == 0) + if (mConfig->getMediaDirection() == RtpConfig::MEDIA_DIRECTION_NO_FLOW) { IMLOGI0("[update] pause RTCP"); return stop(); @@ -132,7 +132,8 @@ ImsMediaResult TextStreamGraphRtcp::update(RtpConfig* config) } } - if (mGraphState == kStreamStateCreated && mConfig->getRtcpConfig().getIntervalSec() != 0) + if (mGraphState == kStreamStateCreated && + mConfig->getMediaDirection() != RtpConfig::MEDIA_DIRECTION_NO_FLOW) { IMLOGI0("[update] resume RTCP"); return start(); @@ -147,6 +148,24 @@ ImsMediaResult TextStreamGraphRtcp::update(RtpConfig* config) return ret; } +ImsMediaResult TextStreamGraphRtcp::start() +{ + IMLOGI1("[start] state[%d]", mGraphState); + + if (mConfig == nullptr) + { + return RESULT_INVALID_PARAM; + } + + if (mConfig->getMediaDirection() != RtpConfig::MEDIA_DIRECTION_NO_FLOW) + { + return BaseStreamGraph::start(); + } + + // not started + return RESULT_SUCCESS; +} + bool TextStreamGraphRtcp::setMediaQualityThreshold(MediaQualityThreshold* threshold) { if (threshold != nullptr) diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpRx.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpRx.cpp index fa7eafa8..a4456320 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpRx.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpRx.cpp @@ -89,7 +89,7 @@ ImsMediaResult TextStreamGraphRtpRx::update(RtpConfig* config) if (*mConfig == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpTx.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpTx.cpp index 5976bb00..902709b3 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpTx.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtpTx.cpp @@ -98,7 +98,7 @@ ImsMediaResult TextStreamGraphRtpTx::update(RtpConfig* config) if (*mConfig == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcp.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcp.cpp index 28ef246a..03a6f728 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcp.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcp.cpp @@ -94,7 +94,7 @@ ImsMediaResult VideoStreamGraphRtcp::update(RtpConfig* config) if (*reinterpret_cast<VideoConfig*>(mConfig) == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } @@ -105,6 +105,12 @@ ImsMediaResult VideoStreamGraphRtcp::update(RtpConfig* config) mConfig = new VideoConfig(pConfig); + if (mConfig->getMediaDirection() == RtpConfig::MEDIA_DIRECTION_NO_FLOW) + { + IMLOGI0("[update] pause RTCP"); + return stop(); + } + ImsMediaResult ret = ImsMediaResult::RESULT_NOT_READY; // stop scheduler if (mGraphState == kStreamStateRunning) @@ -125,7 +131,8 @@ ImsMediaResult VideoStreamGraphRtcp::update(RtpConfig* config) } } - if (mGraphState == kStreamStateCreated && mConfig->getRtcpConfig().getIntervalSec() != 0) + if (mGraphState == kStreamStateCreated && + mConfig->getMediaDirection() != RtpConfig::MEDIA_DIRECTION_NO_FLOW) { IMLOGI0("[update] resume RTCP"); return start(); @@ -140,6 +147,24 @@ ImsMediaResult VideoStreamGraphRtcp::update(RtpConfig* config) return ret; } +ImsMediaResult VideoStreamGraphRtcp::start() +{ + IMLOGI1("[start] state[%d]", mGraphState); + + if (mConfig == nullptr) + { + return RESULT_INVALID_PARAM; + } + + if (mConfig->getMediaDirection() != RtpConfig::MEDIA_DIRECTION_NO_FLOW) + { + return BaseStreamGraph::start(); + } + + // not started + return RESULT_SUCCESS; +} + bool VideoStreamGraphRtcp::setMediaQualityThreshold(MediaQualityThreshold* threshold) { if (threshold != nullptr) diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpRx.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpRx.cpp index c93bf83a..30912f9e 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpRx.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpRx.cpp @@ -90,7 +90,7 @@ ImsMediaResult VideoStreamGraphRtpRx::update(RtpConfig* config) if (*reinterpret_cast<VideoConfig*>(mConfig) == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpTx.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpTx.cpp index ea3d4654..71a6f050 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpTx.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtpTx.cpp @@ -106,7 +106,7 @@ ImsMediaResult VideoStreamGraphRtpTx::update(RtpConfig* config) if (*reinterpret_cast<VideoConfig*>(mConfig) == *pConfig) { - IMLOGD0("[update] no update"); + IMLOGI0("[update] no update"); return RESULT_SUCCESS; } diff --git a/test/app/ImsMediaTestingApp/app/src/main/java/com/example/imsmediatestingapp/MainActivity.java b/test/app/ImsMediaTestingApp/app/src/main/java/com/example/imsmediatestingapp/MainActivity.java index f68076d5..0a0a6257 100644 --- a/test/app/ImsMediaTestingApp/app/src/main/java/com/example/imsmediatestingapp/MainActivity.java +++ b/test/app/ImsMediaTestingApp/app/src/main/java/com/example/imsmediatestingapp/MainActivity.java @@ -1765,27 +1765,37 @@ public class MainActivity extends AppCompatActivity { PopupMenu mediaDirectionMenu = new PopupMenu(this, findViewById(R.id.mediaDirectionButton)); mediaDirectionMenu.getMenuInflater() .inflate(R.menu.media_direction_menu, mediaDirectionMenu.getMenu()); + int[] direction = { 0 }; mediaDirectionMenu.setOnMenuItemClickListener(item -> { switch (item.getItemId()) { case R.id.noFlowDirectionMenuItem: - mAudioConfig.setMediaDirection(AudioConfig.MEDIA_DIRECTION_NO_FLOW); + direction[0] = RtpConfig.MEDIA_DIRECTION_NO_FLOW; break; case R.id.sendReceiveDirectionMenuItem: - mAudioConfig.setMediaDirection(AudioConfig.MEDIA_DIRECTION_SEND_RECEIVE); + direction[0] = RtpConfig.MEDIA_DIRECTION_SEND_RECEIVE; break; case R.id.receiveOnlyDirectionMenuItem: - mAudioConfig.setMediaDirection(AudioConfig.MEDIA_DIRECTION_RECEIVE_ONLY); + direction[0] = RtpConfig.MEDIA_DIRECTION_RECEIVE_ONLY; break; case R.id.sendOnlyDirectionMenuItem: - mAudioConfig.setMediaDirection(AudioConfig.MEDIA_DIRECTION_SEND_ONLY); + direction[0] = RtpConfig.MEDIA_DIRECTION_SEND_ONLY; break; case R.id.inactiveDirectionMenuItem: - mAudioConfig.setMediaDirection(AudioConfig.MEDIA_DIRECTION_INACTIVE); + direction[0] = RtpConfig.MEDIA_DIRECTION_INACTIVE; break; default: return false; } + mAudioConfig.setMediaDirection(direction[0]); mAudioSession.modifySession(mAudioConfig); + if (mIsVideoSessionOpened) { + mVideoConfig.setMediaDirection(direction[0]); + mVideoSession.modifySession(mVideoConfig); + } + if (mIsTextSessionOpened) { + mTextConfig.setMediaDirection(direction[0]); + mTextSession.modifySession(mTextConfig); + } return true; }); mediaDirectionMenu.show(); diff --git a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcpTest.cpp b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcpTest.cpp index 4436e429..a292a5f5 100644 --- a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcpTest.cpp +++ b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextStreamGraphRtcpTest.cpp @@ -23,7 +23,7 @@ using namespace android::telephony::imsmedia; // RtpConfig -const int32_t kMediaDirection = RtpConfig::MEDIA_DIRECTION_NO_FLOW; +const int32_t kMediaDirection = RtpConfig::MEDIA_DIRECTION_INACTIVE; const android::String8 kRemoteAddress("127.0.0.1"); const int32_t kRemotePort = 10000; const int8_t kDscp = 0; @@ -130,13 +130,11 @@ TEST_F(TextStreamGraphRtcpTest, TestRtcpStreamAndUpdate) EXPECT_EQ(graph->update(&config), RESULT_SUCCESS); EXPECT_EQ(graph->getState(), kStreamStateRunning); - rtcp.setIntervalSec(0); - config.setRtcpConfig(rtcp); + config.setMediaDirection(RtpConfig::MEDIA_DIRECTION_NO_FLOW); EXPECT_EQ(graph->update(&config), RESULT_SUCCESS); EXPECT_EQ(graph->getState(), kStreamStateCreated); - rtcp.setIntervalSec(5); - config.setRtcpConfig(rtcp); + config.setMediaDirection(RtpConfig::MEDIA_DIRECTION_INACTIVE); EXPECT_EQ(graph->update(&config), RESULT_SUCCESS); EXPECT_EQ(graph->getState(), kStreamStateRunning); diff --git a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcpTest.cpp b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcpTest.cpp index 327e42fc..0806fe7d 100644 --- a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcpTest.cpp +++ b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoStreamGraphRtcpTest.cpp @@ -24,7 +24,7 @@ using namespace android::telephony::imsmedia; // RtpConfig -const int32_t kMediaDirection = RtpConfig::MEDIA_DIRECTION_SEND_RECEIVE; +const int32_t kMediaDirection = RtpConfig::MEDIA_DIRECTION_INACTIVE; const android::String8 kRemoteAddress("127.0.0.1"); const int32_t kRemotePort = 10000; const int32_t kMtu = 1300; @@ -163,6 +163,14 @@ TEST_F(VideoStreamGraphRtcpTest, TestRtcpStreamAndUpdate) EXPECT_EQ(graph->update(&config), RESULT_SUCCESS); EXPECT_EQ(graph->getState(), kStreamStateRunning); + config.setMediaDirection(RtpConfig::MEDIA_DIRECTION_NO_FLOW); + EXPECT_EQ(graph->update(&config), RESULT_SUCCESS); + EXPECT_EQ(graph->getState(), kStreamStateCreated); + + config.setMediaDirection(RtpConfig::MEDIA_DIRECTION_INACTIVE); + EXPECT_EQ(graph->update(&config), RESULT_SUCCESS); + EXPECT_EQ(graph->getState(), kStreamStateRunning); + EXPECT_EQ(graph->stop(), RESULT_SUCCESS); EXPECT_EQ(graph->getState(), kStreamStateCreated); } |