CHECK_NULL_RETURN(sinkManager_, HI_FAILURE, "sink manager is null");
CHECK_NULL_RETURN(videoDecoder_, HI_FAILURE, "video decoder is null");
+ // 0. 如果播放器已暂停,跳过请求缓冲区,避免屏幕关闭时连续失败
+ if (paused_) {
+ MEDIA_DEBUG_LOG("player is paused, skip requesting surface buffer");
+ return HI_SUCCESS;
+ }
+
// 1. if video sink have cache, means have remain buffer not send to surface, don't need request buffer from surface
bool haveCache = sinkManager_->HaveCacheFrame(false);
if (haveCache) {
surfaceBuf_ = LvRequestBuffer(reinterpret_cast<lv_obj_t *>(surface_), 0);
#endif
if (surfaceBuf_ == nullptr) {
+ // 如果播放器已暂停,不增加失败计数,直接返回成功
+ if (paused_) {
+ MEDIA_DEBUG_LOG("surface buffer request failed but player is paused, skip error count");
+ return HI_SUCCESS;
+ }
if (continousRequestSurfaceBufferFailCount_ == MAX_CONTINOUS_REQUEST_SURFACE_BUFFER_FAIL_COUNT) {
PalayControlEventItem item = { EVNET_VIDEO_RUNNING_ERR };
eventQueue_.push_back(item);