已开启
Miracast安全问题增改 #571
Miracast安全问题增改 #571
已开启
Bingka_OH创建于 17 天前
4 个文件变更+35-12
@@ -105,8 +105,13 @@ void AudioAACDecoder::OnFrame(const Frame::Ptr &frame)
105 avPacket_->data = frame->Data();105 avPacket_->data = frame->Data();
106 avPacket_->size = frame->Size();106 avPacket_->size = frame->Size();
107 107 
108- avcodec_send_packet(codecCtx_, avPacket_);108+ int ret = avcodec_send_packet(codecCtx_, avPacket_);
109- int ret = avcodec_receive_frame(codecCtx_, avFrame_);109+ if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) {
110+ SHARING_LOGE("avcodec send packet failed, ret=%{public}d", ret);
111+ return;
112+ }
113+ 
114+ ret = avcodec_receive_frame(codecCtx_, avFrame_);
110 if (ret < 0) {115 if (ret < 0) {
111 SHARING_LOGE("avcodec receive frame failed, ret=%{public}d", ret);116 SHARING_LOGE("avcodec receive frame failed, ret=%{public}d", ret);
112 return;117 return;
@@ -49,8 +49,12 @@ int32_t DataShareHelper::RegisterObserver(const sptr<AAFwk::IDataAbilityObserver
49 SHARING_LOGE("fail to register observer, helper is null");49 SHARING_LOGE("fail to register observer, helper is null");
50 return DATA_SHARE_ERROR;50 return DATA_SHARE_ERROR;
51 }51 }
52- helper_->RegisterObserver(GetDefaultNamerUri(), observer);52+ int32_t ret1 = helper_->RegisterObserver(GetDefaultNamerUri(), observer);
53- helper_->RegisterObserver(GetDisplayNameUri(), observer);53+ int32_t ret2 = helper_->RegisterObserver(GetDisplayNameUri(), observer);
54+ if (ret1 != DATA_SHARE_SUCCESS || ret2 != DATA_SHARE_SUCCESS) {
55+ SHARING_LOGE("register observer failed, ret1=%{public}d, ret2=%{public}d", ret1, ret2);
56+ return DATA_SHARE_ERROR;
57+ }
54 return DATA_SHARE_SUCCESS;58 return DATA_SHARE_SUCCESS;
55}59}
56 60 
@@ -60,8 +64,12 @@ int32_t DataShareHelper::UnregisterObserver(const sptr<AAFwk::IDataAbilityObserv
60 SHARING_LOGE("fail to unregister observer, helper is null");64 SHARING_LOGE("fail to unregister observer, helper is null");
61 return DATA_SHARE_ERROR;65 return DATA_SHARE_ERROR;
62 }66 }
63- helper_->UnregisterObserver(GetDefaultNamerUri(), observer);67+ int32_t ret1 = helper_->UnregisterObserver(GetDefaultNamerUri(), observer);
64- helper_->UnregisterObserver(GetDisplayNameUri(), observer);68+ int32_t ret2 = helper_->UnregisterObserver(GetDisplayNameUri(), observer);
69+ if (ret1 != DATA_SHARE_SUCCESS || ret2 != DATA_SHARE_SUCCESS) {
70+ SHARING_LOGE("unregister observer failed, ret1=%{public}d, ret2=%{public}d", ret1, ret2);
71+ return DATA_SHARE_ERROR;
72+ }
65 return DATA_SHARE_SUCCESS;73 return DATA_SHARE_SUCCESS;
66}74}
67 75 
@@ -117,8 +117,11 @@ void WfdRtpConsumer::UpdateOperation(ProsumerStatusMsg::Ptr &statusMsg)
117 }117 }
118 break;118 break;
119 case PROSUMER_PAUSE:119 case PROSUMER_PAUSE:
120- isPaused_ = true;120+ {
121- mediaTypePaused_ = statusMsg->mediaType;121+ std::lock_guard<std::mutex> lock(pauseMutex_);
122+ isPaused_ = true;
123+ mediaTypePaused_ = statusMsg->mediaType;
124+ }
122 statusMsg->status = PROSUMER_NOTIFY_PAUSE_SUCCESS;125 statusMsg->status = PROSUMER_NOTIFY_PAUSE_SUCCESS;
123 UpdateWritingTimerState(true);126 UpdateWritingTimerState(true);
124 break;127 break;
@@ -315,8 +318,11 @@ void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame)
315 318 
316 MediaData::Ptr mediaData;319 MediaData::Ptr mediaData;
317 if (frame->GetTrackType() == TRACK_AUDIO) {320 if (frame->GetTrackType() == TRACK_AUDIO) {
318- if (isPaused_ && (mediaTypePaused_ == MEDIA_TYPE_AUDIO || mediaTypePaused_ == MEDIA_TYPE_AV)) {321+ {
319- return;322+ std::lock_guard<std::mutex> lock(pauseMutex_);
323+ if (isPaused_ && (mediaTypePaused_ == MEDIA_TYPE_AUDIO || mediaTypePaused_ == MEDIA_TYPE_AV)) {
324+ return;
325+ }
320 }326 }
321 327 
322 mediaData = std::make_shared<MediaData>();328 mediaData = std::make_shared<MediaData>();
@@ -330,8 +336,11 @@ void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame)
330 336 
331 dispatcher->InputData(mediaData);337 dispatcher->InputData(mediaData);
332 } else if (frame->GetTrackType() == TRACK_VIDEO) {338 } else if (frame->GetTrackType() == TRACK_VIDEO) {
333- if (isPaused_ && (mediaTypePaused_ == MEDIA_TYPE_VIDEO || mediaTypePaused_ == MEDIA_TYPE_AV)) {339+ {
334- return;340+ std::lock_guard<std::mutex> lock(pauseMutex_);
341+ if (isPaused_ && (mediaTypePaused_ == MEDIA_TYPE_VIDEO || mediaTypePaused_ == MEDIA_TYPE_AV)) {
342+ return;
343+ }
335 }344 }
336 345 
337 auto p = frame->Data();346 auto p = frame->Data();
@@ -88,6 +88,7 @@ private:
88 std::chrono::steady_clock::time_point gopInterval_;88 std::chrono::steady_clock::time_point gopInterval_;
89 std::pair<int32_t, NetworkFactory::ServerPtr> rtpServer_ = {0, nullptr};89 std::pair<int32_t, NetworkFactory::ServerPtr> rtpServer_ = {0, nullptr};
90 90 
91+ std::mutex pauseMutex_;
91 std::atomic<int> mediaTypePaused_ = MEDIA_TYPE_AV;92 std::atomic<int> mediaTypePaused_ = MEDIA_TYPE_AV;
92 93 
93 RtpUnpack::Ptr rtpUnpacker_ = nullptr;94 RtpUnpack::Ptr rtpUnpacker_ = nullptr;