diff --git a/services/services/screen_capture/server/screen_capture_server.cpp b/services/services/screen_capture/server/screen_capture_server.cpp index 7f0d21cc0f0ebd8b92f2f896abcfe4ecc13f19dd..d6661275a0e7af9a28a8e44195003045f89e71ec 100644 --- a/services/services/screen_capture/server/screen_capture_server.cpp +++ b/services/services/screen_capture/server/screen_capture_server.cpp @@ -680,8 +680,7 @@ int32_t ScreenCaptureServer::OnStartScreenCapture() int32_t ret = MSERR_UNSUPPORT; if (captureConfig_.dataType == DataType::ORIGINAL_STREAM) { ret = StartScreenCaptureStream(); - } - if (captureConfig_.dataType == DataType::CAPTURE_FILE) { + } else if (captureConfig_.dataType == DataType::CAPTURE_FILE) { ret = StartScreenCaptureFile(); } if (ret == MSERR_OK) { @@ -757,7 +756,7 @@ int32_t ScreenCaptureServer::InitVideoCap(VideoCaptureInfo videoInfo) int32_t ScreenCaptureServer::InitRecorder() { - CHECK_AND_RETURN_RET_LOG(outputFd_>0, MSERR_INVALID_OPERATION, "the outputFd is invalid"); + CHECK_AND_RETURN_RET_LOG(outputFd_ > 0, MSERR_INVALID_OPERATION, "the outputFd is invalid"); MEDIA_LOGI("InitRecorder start"); MediaTrace trace("ScreenCaptureServer::InitRecorder"); recorder_ = Media::RecorderServer::Create(); @@ -810,7 +809,7 @@ bool ScreenCaptureServer::UpdatePrivacyUsingPermissionState(VideoPermissionState { // Root users should be whitelisted if (appInfo_.appUid == ROOT_UID) { - MEDIA_LOGI("Root user. Privacy Granted"); + MEDIA_LOGI("Root user. Privacy Granted. state: %{public}d", state); return true; } @@ -846,7 +845,7 @@ int32_t ScreenCaptureServer::StartScreenCaptureInner(bool isPrivacyAuthorityEnab #ifdef SUPPORT_SCREEN_CAPTURE_WINDOW_NOTIFICATION if (isPrivacyAuthorityEnabled_) { - // Wait fro user interactions to ALLOW/DENY capture + // Wait for user interactions to ALLOW/DENY capture return MSERR_OK; } #endif @@ -1056,8 +1055,8 @@ int32_t ScreenCaptureServer::StartScreenCaptureWithSurface(sptr surface { std::lock_guard lock(mutex_); CHECK_AND_RETURN_RET_LOG(captureState_ == AVScreenCaptureState::CREATED, MSERR_INVALID_OPERATION, - "StartScreenCapture failed, capture is not CREATED, state:%{public}d", captureState_); - MEDIA_LOGI("StartScreenCapture isPrivacyAuthorityEnabled:%{public}d", isPrivacyAuthorityEnabled); + "StartScreenCaptureWithSurface failed, capture is not CREATED, state:%{public}d", captureState_); + MEDIA_LOGI("StartScreenCaptureWithSurface isPrivacyAuthorityEnabled:%{public}d", isPrivacyAuthorityEnabled); if (surface == nullptr) { MEDIA_LOGE("surface is nullptr"); return MSERR_INVALID_OPERATION; @@ -1137,7 +1136,7 @@ int32_t ScreenCaptureServer::CreateVirtualScreen(const std::string &name, sptr= 0, MSERR_UNKNOWN, "CreateVirtualScreen failed"); + CHECK_AND_RETURN_RET_LOG(screenId_ >= 0, MSERR_UNKNOWN, "CreateVirtualScreen failed, invalid screenid"); auto screen = ScreenManager::GetInstance().GetScreenById(screenId_); if (screen == nullptr) { @@ -1296,9 +1295,9 @@ int32_t ScreenCaptureServer::ReleaseVideoBuffer() { std::unique_lock lock(mutex_); CHECK_AND_RETURN_RET_LOG(captureState_ == AVScreenCaptureState::STARTED, MSERR_INVALID_OPERATION, - "AcquireVideoBuffer failed, capture is not STARTED, state:%{public}d", captureState_); + "ReleaseVideoBuffer failed, capture is not STARTED, state:%{public}d", captureState_); - CHECK_AND_RETURN_RET_LOG(surfaceCb_ != nullptr, MSERR_NO_MEMORY, "AcquireVideoBuffer failed, callback is nullptr"); + CHECK_AND_RETURN_RET_LOG(surfaceCb_ != nullptr, MSERR_NO_MEMORY, "ReleaseVideoBuffer failed, callback is nullptr"); return (static_cast(surfaceCb_.GetRefPtr()))->ReleaseVideoBuffer(); } @@ -1306,9 +1305,9 @@ int32_t ScreenCaptureServer::ExcludeContent(ScreenCaptureContentFilter &contentF { std::unique_lock lock(mutex_); CHECK_AND_RETURN_RET_LOG(captureState_ == AVScreenCaptureState::CREATED, MSERR_INVALID_OPERATION, - "AcquireVideoBuffer failed, capture is not STARTED, state:%{public}d", captureState_); + "ExcludeContent failed, capture is not STARTED, state:%{public}d", captureState_); - MEDIA_LOGI("ScreenCaptureServer::SetMicrophoneEnabled start"); + MEDIA_LOGI("ScreenCaptureServer::ExcludeContent start"); contentFilter_ = contentFilter; // For the moment, not support: diff --git a/test/unittest/screen_capture_test/capi/src/screen_capture_capi_mock.cpp b/test/unittest/screen_capture_test/capi/src/screen_capture_capi_mock.cpp index 85bc8379424ee46360de0105e8a7173472ad24d0..fb6ce9d01a4221c519e84b9ebe87f4b18eafdf8f 100644 --- a/test/unittest/screen_capture_test/capi/src/screen_capture_capi_mock.cpp +++ b/test/unittest/screen_capture_test/capi/src/screen_capture_capi_mock.cpp @@ -14,6 +14,7 @@ */ #include "screen_capture_capi_mock.h" +#include "native_window.h" using namespace std; using namespace OHOS; @@ -155,8 +156,10 @@ int32_t ScreenCaptureCapiMock::StartScreenCapture() int32_t ScreenCaptureCapiMock::StartScreenCaptureWithSurface(const std::any& value) { UNITTEST_CHECK_AND_RETURN_RET_LOG(screenCapture_ != nullptr, MSERR_INVALID_OPERATION, "screenCapture_ == nullptr"); - OHNativeWindow* window = std::any_cast(value); - return OH_AVScreenCapture_StartScreenCaptureWithSurface(screenCapture_, window); + sptr surface = std::any_cast>(value); + OHNativeWindow* nativeWindow = new OHNativeWindow(); + nativeWindow->surface = surface; + return OH_AVScreenCapture_StartScreenCaptureWithSurface(screenCapture_, nativeWindow); } int32_t ScreenCaptureCapiMock::Init(AVScreenCaptureConfig config) diff --git a/test/unittest/screen_capture_test/screen_capture_unittest/src/screen_capture_unit_test.cpp b/test/unittest/screen_capture_test/screen_capture_unittest/src/screen_capture_unit_test.cpp index 72d4f7147cf4f70333c8f3181b798a7146725f1b..3af28598ead7ef008b0b224740a56ef9786b43ca 100644 --- a/test/unittest/screen_capture_test/screen_capture_unittest/src/screen_capture_unit_test.cpp +++ b/test/unittest/screen_capture_test/screen_capture_unittest/src/screen_capture_unit_test.cpp @@ -302,104 +302,6 @@ void ScreenCaptureUnitTest::AudioLoopWithoutRelease(void) } } -/** - * @tc.name: screen_capture_with_surface_01 - * @tc.desc: do screencapture - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(ScreenCaptureUnitTest, screen_capture_with_surface_01, TestSize.Level2) -{ - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 before"); - Security::AccessToken::AccessTokenID tokenID = - Security::AccessToken::AccessTokenKit::GetNativeTokenId("distributedsched"); - SetSelfTokenID(tokenID); - AVScreenCaptureConfig config_; - SetConfig(config_); - config_.videoInfo.videoCapInfo.videoFrameWidth = 1920; - config_.videoInfo.videoCapInfo.videoFrameHeight = 1080; - config_.videoInfo.videoCapInfo.videoSource = VIDEO_SOURCE_SURFACE_RGBA; - bool isMicrophone = true; - screenCapture_->SetMicrophoneEnabled(isMicrophone); - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 CreateRecorder"); - std::shared_ptr recorder = nullptr; - recorder = RecorderFactory::CreateRecorder(); - int32_t videoSourceId = 0; - EXPECT_EQ(MSERR_OK, recorder->SetVideoSource(VIDEO_SOURCE_SURFACE_RGBA, videoSourceId)); - EXPECT_EQ(MSERR_OK, recorder->SetOutputFormat(OutputFormatType::FORMAT_MPEG_4)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoEncoder(videoSourceId, VideoCodecFormat::H265)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoSize(videoSourceId, 1080, 1920)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoFrameRate(videoSourceId, 30)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoEncodingBitRate(videoSourceId, 2000000)); - int32_t outputFd = open((screenCaptureRoot + "screen_capture_with_surface_01.mp4").c_str(), - O_RDWR | O_CREAT, 0777); - ASSERT_TRUE(outputFd >= 0); - EXPECT_EQ(MSERR_OK, recorder->SetOutputFile(outputFd)); - EXPECT_EQ(MSERR_OK, recorder->Prepare()); - sptr consumer = recorder->GetSurface(videoSourceId); - EXPECT_EQ(MSERR_OK, screenCapture_->Init(config_)); - EXPECT_EQ(MSERR_OK, screenCapture_->StartScreenCaptureWithSurface(consumer)); - EXPECT_EQ(MSERR_OK, recorder->Start()); - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 recorder Start"); - sleep(RECORDER_TIME); - EXPECT_EQ(MSERR_OK, recorder->Stop(true)); - EXPECT_EQ(MSERR_OK, recorder->Reset()); - EXPECT_EQ(MSERR_OK, recorder->Release()); - EXPECT_EQ(MSERR_OK, screenCapture_->StopScreenCapture()); - EXPECT_EQ(MSERR_OK, screenCapture_->Release()); - CloseFile(); - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 after"); -} - -/** - * @tc.name: screen_capture_with_surface_02 - * @tc.desc: do screencapture - * @tc.type: FUNC - * @tc.require: - */ -HWTEST_F(ScreenCaptureUnitTest, screen_capture_with_surface_02, TestSize.Level2) -{ - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 before"); - Security::AccessToken::AccessTokenID tokenID = - Security::AccessToken::AccessTokenKit::GetNativeTokenId("distributedsched"); - SetSelfTokenID(tokenID); - AVScreenCaptureConfig config_; - SetConfig(config_); - config_.videoInfo.videoCapInfo.videoFrameWidth = 640; - config_.videoInfo.videoCapInfo.videoFrameHeight = 480; - config_.videoInfo.videoCapInfo.videoSource = VIDEO_SOURCE_SURFACE_RGBA; - bool isMicrophone = true; - screenCapture_->SetMicrophoneEnabled(isMicrophone); - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 CreateRecorder"); - std::shared_ptr recorder = nullptr; - recorder = RecorderFactory::CreateRecorder(); - int32_t videoSourceId = 0; - EXPECT_EQ(MSERR_OK, recorder->SetVideoSource(VIDEO_SOURCE_SURFACE_RGBA, videoSourceId)); - EXPECT_EQ(MSERR_OK, recorder->SetOutputFormat(OutputFormatType::FORMAT_MPEG_4)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoEncoder(videoSourceId, VideoCodecFormat::H265)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoSize(videoSourceId, 480, 640)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoFrameRate(videoSourceId, 30)); - EXPECT_EQ(MSERR_OK, recorder->SetVideoEncodingBitRate(videoSourceId, 2000000)); - int32_t outputFd = open((screenCaptureRoot + "screen_capture_with_surface_02.mp4").c_str(), - O_RDWR | O_CREAT, 0777); - ASSERT_TRUE(outputFd >= 0); - EXPECT_EQ(MSERR_OK, recorder->SetOutputFile(outputFd)); - EXPECT_EQ(MSERR_OK, recorder->Prepare()); - sptr consumer = recorder->GetSurface(videoSourceId); - EXPECT_EQ(MSERR_OK, screenCapture_->Init(config_)); - EXPECT_EQ(MSERR_OK, screenCapture_->StartScreenCaptureWithSurface(consumer)); - EXPECT_EQ(MSERR_OK, recorder->Start()); - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 recorder Start"); - sleep(RECORDER_TIME); - EXPECT_EQ(MSERR_OK, recorder->Stop(true)); - EXPECT_EQ(MSERR_OK, recorder->Reset()); - EXPECT_EQ(MSERR_OK, recorder->Release()); - EXPECT_EQ(MSERR_OK, screenCapture_->StopScreenCapture()); - EXPECT_EQ(MSERR_OK, screenCapture_->Release()); - CloseFile(); - MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 after"); -} - /** * @tc.name: screen_capture_specified_window_file_01 * @tc.desc: do screencapture @@ -2148,5 +2050,103 @@ HWTEST_F(ScreenCaptureUnitTest, screen_capture_mic_close_open_close, TestSize.Le EXPECT_EQ(MSERR_OK, screenCapture_->Release()); CloseFile(); } + +/** + * @tc.name: screen_capture_with_surface_01 + * @tc.desc: do screencapture + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ScreenCaptureUnitTest, screen_capture_with_surface_01, TestSize.Level2) +{ + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 before"); + Security::AccessToken::AccessTokenID tokenID = + Security::AccessToken::AccessTokenKit::GetNativeTokenId("distributedsched"); + SetSelfTokenID(tokenID); + AVScreenCaptureConfig config_; + SetConfig(config_); + config_.videoInfo.videoCapInfo.videoFrameWidth = 1920; + config_.videoInfo.videoCapInfo.videoFrameHeight = 1080; + config_.videoInfo.videoCapInfo.videoSource = VIDEO_SOURCE_SURFACE_RGBA; + bool isMicrophone = true; + screenCapture_->SetMicrophoneEnabled(isMicrophone); + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 CreateRecorder"); + std::shared_ptr recorder = nullptr; + recorder = RecorderFactory::CreateRecorder(); + int32_t videoSourceId = 0; + EXPECT_EQ(MSERR_OK, recorder->SetVideoSource(VIDEO_SOURCE_SURFACE_RGBA, videoSourceId)); + EXPECT_EQ(MSERR_OK, recorder->SetOutputFormat(OutputFormatType::FORMAT_MPEG_4)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoEncoder(videoSourceId, VideoCodecFormat::H265)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoSize(videoSourceId, 1080, 1920)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoFrameRate(videoSourceId, 30)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoEncodingBitRate(videoSourceId, 2000000)); + int32_t outputFd = open((screenCaptureRoot + "screen_capture_with_surface_01.mp4").c_str(), + O_RDWR | O_CREAT, 0777); + ASSERT_TRUE(outputFd >= 0); + EXPECT_EQ(MSERR_OK, recorder->SetOutputFile(outputFd)); + EXPECT_EQ(MSERR_OK, recorder->Prepare()); + sptr consumer = recorder->GetSurface(videoSourceId); + EXPECT_EQ(MSERR_OK, screenCapture_->Init(config_)); + EXPECT_EQ(MSERR_OK, screenCapture_->StartScreenCaptureWithSurface(consumer)); + EXPECT_EQ(MSERR_OK, recorder->Start()); + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 recorder Start"); + sleep(RECORDER_TIME); + EXPECT_EQ(MSERR_OK, recorder->Stop(true)); + EXPECT_EQ(MSERR_OK, recorder->Reset()); + EXPECT_EQ(MSERR_OK, recorder->Release()); + EXPECT_EQ(MSERR_OK, screenCapture_->StopScreenCapture()); + EXPECT_EQ(MSERR_OK, screenCapture_->Release()); + CloseFile(); + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_01 after"); +} + +/** + * @tc.name: screen_capture_with_surface_02 + * @tc.desc: do screencapture + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(ScreenCaptureUnitTest, screen_capture_with_surface_02, TestSize.Level2) +{ + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 before"); + Security::AccessToken::AccessTokenID tokenID = + Security::AccessToken::AccessTokenKit::GetNativeTokenId("distributedsched"); + SetSelfTokenID(tokenID); + AVScreenCaptureConfig config_; + SetConfig(config_); + config_.videoInfo.videoCapInfo.videoFrameWidth = 640; + config_.videoInfo.videoCapInfo.videoFrameHeight = 480; + config_.videoInfo.videoCapInfo.videoSource = VIDEO_SOURCE_SURFACE_RGBA; + bool isMicrophone = true; + screenCapture_->SetMicrophoneEnabled(isMicrophone); + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 CreateRecorder"); + std::shared_ptr recorder = nullptr; + recorder = RecorderFactory::CreateRecorder(); + int32_t videoSourceId = 0; + EXPECT_EQ(MSERR_OK, recorder->SetVideoSource(VIDEO_SOURCE_SURFACE_RGBA, videoSourceId)); + EXPECT_EQ(MSERR_OK, recorder->SetOutputFormat(OutputFormatType::FORMAT_MPEG_4)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoEncoder(videoSourceId, VideoCodecFormat::H265)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoSize(videoSourceId, 480, 640)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoFrameRate(videoSourceId, 30)); + EXPECT_EQ(MSERR_OK, recorder->SetVideoEncodingBitRate(videoSourceId, 2000000)); + int32_t outputFd = open((screenCaptureRoot + "screen_capture_with_surface_02.mp4").c_str(), + O_RDWR | O_CREAT, 0777); + ASSERT_TRUE(outputFd >= 0); + EXPECT_EQ(MSERR_OK, recorder->SetOutputFile(outputFd)); + EXPECT_EQ(MSERR_OK, recorder->Prepare()); + sptr consumer = recorder->GetSurface(videoSourceId); + EXPECT_EQ(MSERR_OK, screenCapture_->Init(config_)); + EXPECT_EQ(MSERR_OK, screenCapture_->StartScreenCaptureWithSurface(consumer)); + EXPECT_EQ(MSERR_OK, recorder->Start()); + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 recorder Start"); + sleep(RECORDER_TIME); + EXPECT_EQ(MSERR_OK, recorder->Stop(true)); + EXPECT_EQ(MSERR_OK, recorder->Reset()); + EXPECT_EQ(MSERR_OK, recorder->Release()); + EXPECT_EQ(MSERR_OK, screenCapture_->StopScreenCapture()); + EXPECT_EQ(MSERR_OK, screenCapture_->Release()); + CloseFile(); + MEDIA_LOGI("ScreenCaptureUnitTest screen_capture_with_surface_02 after"); +} } // namespace Media } // namespace OHOS \ No newline at end of file