已关闭
AI检视安全问题修复 #551
harmonyosgogogo创建于 8月5日关闭于 10月1日
AI检视安全问题修复 #551
已关闭
共 4 个文件变更+43-19
| @@ -104,7 +104,7 @@ void WfdRtpConsumer::UpdateOperation(ProsumerStatusMsg::Ptr &statusMsg) | |||
| 104 | if (Init()) { | 104 | if (Init()) { |
| 105 | statusMsg->status = PROSUMER_NOTIFY_INIT_SUCCESS; | 105 | statusMsg->status = PROSUMER_NOTIFY_INIT_SUCCESS; |
| 106 | } else { | 106 | } else { |
| 107 | - statusMsg->status = PROSUMER_NOTIFY_INIT_SUCCESS; | 107 | + statusMsg->status = PROSUMER_NOTIFY_ERROR; |
| 108 | statusMsg->errorCode = ERR_PROSUMER_CREATE; | 108 | statusMsg->errorCode = ERR_PROSUMER_CREATE; |
| 109 | } | 109 | } |
| 110 | break; | 110 | break; |
| @@ -150,6 +150,10 @@ bool WfdRtpConsumer::Init() | |||
| 150 | bool WfdRtpConsumer::Start() | 150 | bool WfdRtpConsumer::Start() |
| 151 | { | 151 | { |
| 152 | SHARING_LOGD("trace."); | 152 | SHARING_LOGD("trace."); |
| 153 | + if (isRunning_) { | ||
| 154 | + SHARING_LOGW("consumer already running"); | ||
| 155 | + return true; | ||
| 156 | + } | ||
| 153 | if (!StartNetworkServer(port_, rtpServer_.second, rtpServer_.first)) { | 157 | if (!StartNetworkServer(port_, rtpServer_.second, rtpServer_.first)) { |
| 154 | SHARING_LOGE("start rtp server port: %{public}d failed.", port_); | 158 | SHARING_LOGE("start rtp server port: %{public}d failed.", port_); |
| 155 | return false; | 159 | return false; |
| @@ -181,13 +185,14 @@ int32_t WfdRtpConsumer::Release() | |||
| 181 | { | 185 | { |
| 182 | SHARING_LOGD("WFDRtpConsumerId: %{public}u.", GetId()); | 186 | SHARING_LOGD("WFDRtpConsumerId: %{public}u.", GetId()); |
| 183 | auto end = std::chrono::steady_clock::now(); | 187 | auto end = std::chrono::steady_clock::now(); |
| 184 | - std::chrono::duration<double, std::milli> diff = end - gopInterval_; | 188 | + std::chrono::duration<double, std::milli> diff = end - gopInterval_.load(); |
| 185 | 189 | ||
| 186 | - if (frameNums_ > 0) { | 190 | + int32_t frameNums = frameNums_.load(); |
| 191 | + if (frameNums > 0) { | ||
| 187 | SHARING_LOGD( | 192 | SHARING_LOGD( |
| 188 | "TEST STATISTIC Miracast:finish, interval:%{public}.0f ms, agent ID:%{public}d, " | 193 | "TEST STATISTIC Miracast:finish, interval:%{public}.0f ms, agent ID:%{public}d, " |
| 189 | "get video frame, gop:%{public}d, average receiving frames time:%{public}.0f ms.", | 194 | "get video frame, gop:%{public}d, average receiving frames time:%{public}.0f ms.", |
| 190 | - diff.count(), GetSinkAgentId(), frameNums_, diff.count() / frameNums_); | 195 | + diff.count(), GetSinkAgentId(), frameNums, diff.count() / frameNums); |
| 191 | } | 196 | } |
| 192 | Stop(); | 197 | Stop(); |
| 193 | return 0; | 198 | return 0; |
| @@ -258,25 +263,26 @@ void WfdRtpConsumer::HandlePpsUpdate(std::shared_ptr<BufferDispatcher> dispatche | |||
| 258 | 263 | ||
| 259 | void WfdRtpConsumer::HandleVideoKeyFrame() | 264 | void WfdRtpConsumer::HandleVideoKeyFrame() |
| 260 | { | 265 | { |
| 261 | - if (isFirstKeyFrame_) { | 266 | + if (isFirstKeyFrame_.load()) { |
| 262 | MEDIA_LOGD("TEST STATISTICS Miracast:first, agent ID:%{public}d, get video frame.", GetSinkAgentId()); | 267 | MEDIA_LOGD("TEST STATISTICS Miracast:first, agent ID:%{public}d, get video frame.", GetSinkAgentId()); |
| 263 | WfdSinkHiSysEvent::GetInstance().FirstSceneEndReport(__func__, "", | 268 | WfdSinkHiSysEvent::GetInstance().FirstSceneEndReport(__func__, "", |
| 264 | SinkStage::FIRST_FRAME_PROCESSED, SinkStageRes::SUCCESS); | 269 | SinkStage::FIRST_FRAME_PROCESSED, SinkStageRes::SUCCESS); |
| 265 | WfdSinkHiSysEvent::GetInstance().ChangeHisysEventScene(SinkBizScene::MIRRORING_STABILITY); | 270 | WfdSinkHiSysEvent::GetInstance().ChangeHisysEventScene(SinkBizScene::MIRRORING_STABILITY); |
| 266 | - isFirstKeyFrame_ = false; | 271 | + isFirstKeyFrame_.store(false); |
| 267 | } else { | 272 | } else { |
| 268 | auto end = std::chrono::steady_clock::now(); | 273 | auto end = std::chrono::steady_clock::now(); |
| 269 | - std::chrono::duration<double, std::milli> diff = end - gopInterval_; | 274 | + std::chrono::duration<double, std::milli> diff = end - gopInterval_.load(); |
| 270 | - if (frameNums_ > 0) { | 275 | + int32_t frameNums = frameNums_.load(); |
| 276 | + if (frameNums > 0) { | ||
| 271 | MEDIA_LOGD("TEST STATISTIC Miracast:interval:%{public}.0f ms, " | 277 | MEDIA_LOGD("TEST STATISTIC Miracast:interval:%{public}.0f ms, " |
| 272 | "agent ID:%{public}d, get video frame, gop:%{public}d, " | 278 | "agent ID:%{public}d, get video frame, gop:%{public}d, " |
| 273 | "average receiving frames time:%{public}.0f ms.", | 279 | "average receiving frames time:%{public}.0f ms.", |
| 274 | - diff.count(), GetSinkAgentId(), frameNums_, diff.count() / frameNums_); | 280 | + diff.count(), GetSinkAgentId(), frameNums, diff.count() / frameNums); |
| 275 | } | 281 | } |
| 276 | } | 282 | } |
| 277 | 283 | ||
| 278 | - frameNums_ = 1; | 284 | + frameNums_.store(1); |
| 279 | - gopInterval_ = std::chrono::steady_clock::now(); | 285 | + gopInterval_.store(std::chrono::steady_clock::now()); |
| 280 | } | 286 | } |
| 281 | 287 | ||
| 282 | void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame) | 288 | void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame) |
| @@ -315,6 +321,10 @@ void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame) | |||
| 315 | MEDIA_LOGE("data size too small: %{public}d.", frame->Size()); | 321 | MEDIA_LOGE("data size too small: %{public}d.", frame->Size()); |
| 316 | return; | 322 | return; |
| 317 | } | 323 | } |
| 324 | + if ((p + 2) == nullptr) { | ||
| 325 | + MEDIA_LOGE("invalid data ptr"); | ||
| 326 | + return; | ||
| 327 | + } | ||
| 318 | p = *(p + 2) == 0x01 ? p + 3 : p + 4; // 2: fix offset, 3: fix offset, 4: fix offset | 328 | p = *(p + 2) == 0x01 ? p + 3 : p + 4; // 2: fix offset, 3: fix offset, 4: fix offset |
| 319 | if (((p[0]) & 0x1f) == 0x01) { | 329 | if (((p[0]) & 0x1f) == 0x01) { |
| 320 | mediaData = std::make_shared<MediaData>(); | 330 | mediaData = std::make_shared<MediaData>(); |
| @@ -387,6 +397,7 @@ bool WfdRtpConsumer::StartNetworkServer(uint16_t port, NetworkFactory::ServerPtr | |||
| 387 | SHARING_LOGD("trace."); | 397 | SHARING_LOGD("trace."); |
| 388 | if (localIp_.empty()) { | 398 | if (localIp_.empty()) { |
| 389 | SHARING_LOGE("local Ip empty"); | 399 | SHARING_LOGE("local Ip empty"); |
| 400 | + return false; | ||
| 390 | } | 401 | } |
| 391 | 402 | ||
| 392 | if (!NetworkFactory::CreateUdpServer(port, localIp_, shared_from_this(), server)) { | 403 | if (!NetworkFactory::CreateUdpServer(port, localIp_, shared_from_this(), server)) { |
| @@ -77,14 +77,14 @@ private: | |||
| 77 | 77 | ||
| 78 | private: | 78 | private: |
| 79 | bool isFirstPacket_ = true; | 79 | bool isFirstPacket_ = true; |
| 80 | - bool isFirstKeyFrame_ = true; | 80 | + std::atomic<bool> isFirstKeyFrame_ = true; |
| 81 | 81 | ||
| 82 | uint16_t port_ = 0; | 82 | uint16_t port_ = 0; |
| 83 | std::string localIp_; | 83 | std::string localIp_; |
| 84 | - int32_t frameNums_ = 1; | 84 | + std::atomic<int32_t> frameNums_ = 1; |
| 85 | uint32_t contextId_ = 0; | 85 | uint32_t contextId_ = 0; |
| 86 | 86 | ||
| 87 | - std::chrono::steady_clock::time_point gopInterval_; | 87 | + std::atomic<std::chrono::steady_clock::time_point> gopInterval_; |
| 88 | std::pair<int32_t, NetworkFactory::ServerPtr> rtpServer_ = {0, nullptr}; | 88 | std::pair<int32_t, NetworkFactory::ServerPtr> rtpServer_ = {0, nullptr}; |
| 89 | 89 | ||
| 90 | std::atomic<int> mediaTypePaused_ = MEDIA_TYPE_AV; | 90 | std::atomic<int> mediaTypePaused_ = MEDIA_TYPE_AV; |
| @@ -114,8 +114,8 @@ void AudioPlayer::ProcessAudioData(DataBuffer::Ptr data, uint64_t pts) | |||
| 114 | if (!isRunning_) { | 114 | if (!isRunning_) { |
| 115 | return; | 115 | return; |
| 116 | } | 116 | } |
| 117 | - | 117 | + std::shared_ptr<AudioDecoder> audioDecoder = audioDecoder_; |
| 118 | - if (data == nullptr || audioDecoder_ == nullptr || data->Peek() == nullptr || data->Size() <= 0) { | 118 | + if (data == nullptr || audioDecoder == nullptr || data->Peek() == nullptr || data->Size() <= 0) { |
| 119 | return; | 119 | return; |
| 120 | } | 120 | } |
| 121 | 121 | ||
| @@ -123,13 +123,14 @@ void AudioPlayer::ProcessAudioData(DataBuffer::Ptr data, uint64_t pts) | |||
| 123 | frame->codecId_ = audioCodecId_; | 123 | frame->codecId_ = audioCodecId_; |
| 124 | frame->Assign(data->Peek(), data->Size()); | 124 | frame->Assign(data->Peek(), data->Size()); |
| 125 | frame->pts_ = pts; | 125 | frame->pts_ = pts; |
| 126 | - audioDecoder_->OnFrame(frame); | 126 | + audioDecoder->OnFrame(frame); |
| 127 | } | 127 | } |
| 128 | 128 | ||
| 129 | int64_t AudioPlayer::GetDecoderTimestamp() | 129 | int64_t AudioPlayer::GetDecoderTimestamp() |
| 130 | { | 130 | { |
| 131 | - if (audioDecoder_) { | 131 | + std::shared_ptr<AudioDecoder> audioDecoder = audioDecoder_; |
| 132 | - return audioDecoder_->GetDecoderTimestamp(); | 132 | + if (audioDecoder) { |
| 133 | + return audioDecoder->GetDecoderTimestamp(); | ||
| 133 | } | 134 | } |
| 134 | return 0; | 135 | return 0; |
| 135 | } | 136 | } |
| @@ -60,6 +60,10 @@ bool VideoPlayController::Init(VideoTrack &videoTrack) | |||
| 60 | SharingValue::Ptr values = nullptr; | 60 | SharingValue::Ptr values = nullptr; |
| 61 | auto ret = Config::GetInstance().GetConfig("codec", "forceSWDecoder", "isEnable", values); | 61 | auto ret = Config::GetInstance().GetConfig("codec", "forceSWDecoder", "isEnable", values); |
| 62 | if (ret == CONFIGURE_ERROR_NONE) { | 62 | if (ret == CONFIGURE_ERROR_NONE) { |
| 63 | + if (!values->IsBool()) { | ||
| 64 | + SHARING_LOGE("isEnable not bool"); | ||
| 65 | + return false; | ||
| 66 | + } | ||
| 63 | bool value; | 67 | bool value; |
| 64 | values->GetValue<bool>(value); | 68 | values->GetValue<bool>(value); |
| 65 | forceSWDecoder_ = static_cast<bool>(value); | 69 | forceSWDecoder_ = static_cast<bool>(value); |
| @@ -124,6 +128,10 @@ bool VideoPlayController::SetSurface(sptr<Surface> surface, bool keyFrame) | |||
| 124 | bool VideoPlayController::Start(BufferDispatcher::Ptr &dispatcher) | 128 | bool VideoPlayController::Start(BufferDispatcher::Ptr &dispatcher) |
| 125 | { | 129 | { |
| 126 | SHARING_LOGD("trace."); | 130 | SHARING_LOGD("trace."); |
| 131 | + if (dispatcher == nullptr) { | ||
| 132 | + SHARING_LOGE("video play start failed, dispatcher null"); | ||
| 133 | + return false; | ||
| 134 | + } | ||
| 127 | if (isVideoRunning_) { | 135 | if (isVideoRunning_) { |
| 128 | SHARING_LOGW("video play is running."); | 136 | SHARING_LOGW("video play is running."); |
| 129 | return true; | 137 | return true; |
| @@ -326,6 +334,10 @@ void VideoPlayController::OnError(int32_t errorCode) | |||
| 326 | 334 | ||
| 327 | int32_t VideoPlayController::RenderInCopyMode(DataBuffer::Ptr decodedData) | 335 | int32_t VideoPlayController::RenderInCopyMode(DataBuffer::Ptr decodedData) |
| 328 | { | 336 | { |
| 337 | + if (decodedData == nullptr) { | ||
| 338 | + SHARING_LOGE("decodedData null"); | ||
| 339 | + return false; | ||
| 340 | + } | ||
| 329 | SHARING_LOGD("Render begin."); | 341 | SHARING_LOGD("Render begin."); |
| 330 | sptr<SurfaceBuffer> buffer; | 342 | sptr<SurfaceBuffer> buffer; |
| 331 | int32_t releaseFence = -1; | 343 | int32_t releaseFence = -1; |