Camera录像中出现的卡死问题,会导致其他操作ANR
调试的过程中遇到这样一个问题,在停止录像恢复预览的时候会卡住,导致再做其他操作时出现ANR.
看过log如下
2023-09-27 15:11:43.167 514-6236/? W/CameraSource: Timed out waiting for incoming camera video frames: 828023629 us
2023-09-27 15:11:46.168 514-6236/? W/CameraSource: Timed out waiting for incoming camera video frames: 828023629 us
当程序卡住时会反复弹此log。看的出事某个操作超时导致的,因此继续跟进log打印的代码中
\frameworks\av\media\libstagefright下的 CameraSource.cpp
函数status_t CameraSource::read内找到相关代码如下:
status_t CameraSource::read( MediaBufferBase **buffer, const ReadOptions *options) { ALOGV("read"); *buffer = NULL; int64_t seekTimeUs; ReadOptions::SeekMode mode; if (options && options->getSeekTo(&seekTimeUs, &mode)) { return ERROR_UNSUPPORTED; } sp<IMemory> frame; int64_t frameTime; { Mutex::Autolock autoLock(mLock); while (mStarted && !mEos && mFramesReceived.empty()) { if (NO_ERROR != mFrameAvailableCondition.waitRelative(mLock, mTimeBetweenFrameCaptureUs * 1000LL + CAMERA_SOURCE_TIMEOUT_NS)) { if (mCameraRecordingProxy != 0 && !IInterface::asBinder(mCameraRecordingProxy)->isBinderAlive()) { ALOGW("camera recording proxy is gone"); return ERROR_END_OF_STREAM; } ALOGW("Timed out waiting for incoming camera video frames: %" PRId64 " us", mLastFrameTimestampUs); } } if (!mStarted) { return OK; } if (mFramesReceived.empty()) { return ERROR_END_OF_STREAM; } frame = *mFramesReceived.begin(); mFramesReceived.erase(mFramesReceived.begin()); frameTime = *mFrameTimes.begin(); mFrameTimes.erase(mFrameTimes.begin()); mFramesBeingEncoded.push_back(frame); *buffer = new MediaBuffer(frame->pointer(), frame->size()); (*buffer)->setObserver(this); (*buffer)->add_ref(); (*buffer)->meta_data().setInt64(kKeyTime, frameTime); } return OK; }
卡在循环里不能出来,是什么原因导致的呢?烦请大佬们指教
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)