Ring3转入Ring0跟踪

本文探讨了在操作系统中从用户模式(Ring3)切换到内核模式(Ring0)的过程,深入分析了权限跟踪的重要性以及相关技术细节,对于理解操作系统核心功能和安全性具有重要意义。
通过反汇编跟踪一个API函数从Ring3层到Ring0层的具体执行过程,有助于我们加深对相关内核Hook技术的理解。
我们可以使用OD打开notepad.exe程序,对CreateFileW下断后,可以发现,有这样一行代码:
CALL DWORD PTR DS:[<&ntdll.NtCreateFile>>; ntdll.ZwCreateFile
也就是说,CreateFileW(Win32API)实际上是调用了ntdll中的NtCreateFile(或ZwCreateFile)函数。
使用微软自带的Dependency工具查看ntdll中的NtCreateFile和ZwCreateFile函数,可以发现,两个函数的入口地址是一样的,也就是说,两个函数可以看成是同一个函数。
第三帧日志:CameraUnit, ConsumerImpl: pictureProcess, PICTURE onImageAvailable CameraUnit, ConsumerImpl: pictureProcess, role: 0, physicalId: 0, hdrType: 0, format: 32, timestamp: 2052971365000, surfaceKey: rear_main&surface_key_picture&32&4096x3072, size: 4096x3072 CameraUnit, CameraUnit_TRACE: traceBeginSection, msg: CameraUnit.HalPictureImageArrived, role: 0 CameraUnit, CameraUnit_TRACE: traceBeginSection, msg: ApsProcessor.addPictureImage, timestamp: 2052971365000 CameraUnit, ApsProcessor: addPictureImage, imageItem: hdr_type: 0, burst_shot: false, date: 1760173555493, capture_thermal_level: 3, capture_job_type: 0, physical_id: 0, item_info_type: CAPTURE, capture_mode: aiHighPixel, burst_capture_type: 0, burst_capture_is_flicker: 0, ai_cut_enable: 0, image_height: 3072, rawsr_enable: 0, multi_frame_burst_shot_cluster_support: false, image_role: 0, image_format: 32, fineFoodEnable: false, rec_burst_number: -1, time_stamp: 2052971365000, capture_defer_support: false, is_portrait_fallback: false, ai_high_pixel_enable: true, multi_frame_burst_shot_support: false, burst_capture_no_deflicker: false, auto_com ApsAdapter, ApsCaptureAdapterImpl: addImage, timestamp:2052971365000, size: 3, isValid: false CameraUnit, CameraUnit_TRACE: traceEndSection, msg: ApsProcessor.addPictureImage, timestamp: 2052971365000 CameraUnit, CameraUnit_TRACE: traceEndSection, msg: CameraUnit.HalPictureImageArrived, role: 0 MtkCam/Utils: {CamProfile}[AppStreamMgr::ResultHandler::enqueResult] - requestNo:170 userId:0x40: (1-th) ===> ( overtime > 1 ms) [start-->now: 3 ms] [last-->now: 3 ms] PQ_HDR : DpAsyncBlitStream:: thie platform unsupport compress format MtkCam/Utils: {CamProfile}[CameraDevice3SessionImpl::onFrameUpdated] updateResult: requestNo:170 userId:0x40 OAppMeta#(left:1 this:1): (1-th) ===> ( overtime > 1 ms) [start-->now: 4 ms] [last-->now: 4 ms] Looper : Slow dispatch took 115ms android.fg app=system_server main=false group=UNKNOWN h=android.os.Handler c=com.android.server.location.gnss.GnssLocationProvider$$ExternalSyntheticLambda27@ebddb1e m=0 ifunc_cam_twin: [update_afterRunTwin_Dma] WARNING: slave_num 1 but channel.size() 1 Hal3ARaw: E3ACtrl_SetThridFdInfo input version=6, face num=0, ffd data[0].x=0, ffd data[0].y=0, face roi(0, 0, 0, 0) [UAH_CLIENT]: UahRelease, handle:4593 URCC_CORE_SERVER: [urccRequestReleaseExec] urccRelease: handle: 4593, said:-1 AudioFlingerExtImpl: getActiveTracksPids pids => PQ_HDR : DpAsyncBlitStream:: thie platform unsupport compress format NormalPipe_Thread: [sendCmd] WARNING: size have been reduce to 0x0(0x0) by enque NormalPipe_Thread: [configEnquePath] WARNING: mpEnqRoleSequence is empty! OplusCameraService: CameraServiceExtImpl.cpp: 5100 getTrdPartyFBJsonValue() getTrdPartyFBJsonValue apkPropName: oplus.video.beauty.com.oplus.camera, prop value: -1 ShadingTrans_core: [TSF_Plus] TSF ext para is 0 and VRA is 0 paramctrl_validate: DCESO too old, use default setting, u4id(172) DcsFrmId(166) (validatePerFrameP2){#318:vendor/mediatek/proprietary/hardware/mtkcam/aaa/source/isp_6s/isp_tuning/paramctrl/paramctrl_validate.cpp} ActivityManager: Broadcast: Intent { act=android.media.ACTION_AUDIO_PLAYBACK_STATE_CHANGED pkg=null } ordered=false userid=-1 resultTo null ActivityManager: broadcastIntentLocked callingPid: 3513 callingUid=1000 PQ_HDR : DpAsyncBlitStream:: thie platform unsupport compress format Hal3ARaw: E3ACtrl_SetThridFdInfo input version=6, face num=0, ffd data[0].x=0, ffd data[0].y=0, face roi(0, 0, 0, 0) OplusAtlasAudioDataRecorder: no need check again URCC_CORE_SERVER: [urccRequestReleaseExec] urccRelease: handle: 4595, said:-1 CameraUnit, ApsProcessor: notifyErrorType, type: DIED_TYPE_CAPTURE_FAILED, timestamp: 2051840544000, imageNum: 1, mergeNum: 4 CameraUnit, Camera2Impl: onCaptureFailed, fail reason:0 CameraUnit, ConsumerImpl: onCaptureStarted, timestamp: 2052858726000, idx: 0, frameNumber: 167, mShutterCallbackCount: 1 CameraUnit, ConsumerImpl: onCaptureBufferLost, frameNumber:167 ApsAdapter, ApsAdapterImpl: onCaptureFailed, identity2051840544000 ApsAdapter, ApsCaptureAdapterImpl: countAddFrame, first frame: 1760173555541 ApsAdapter, ApsCaptureAdapterImpl: countAddFrame, mMergeIdentity: 2051840544000, count: 1, mMergeNum: 4, isCaptureFailed: true, mbCaptureFail: true OCAM_ApsService: onCaptureFailed CameraUnit, ConsumerImpl: onPictureCaptureProgressed, timestamp: 2052858726000, usePartialMeta: false OCAM_OppoCamera_TRACE: traceBeginSection, msg: captureX onCaptureFailed failCode: 0 CameraUnit, Camera2Impl: takeNextBurstCapture, mbContinueShot :false, mReceiveCshotNum: 0, mMaxBustShotNum: 20 CameraUnit, CameraUnit_TRACE: traceBeginSection, msg: CameraUnit.onCaptureCompleted, timestamp: 2052858726000 CameraUnit, ConsumerImpl: onCaptureCompleted, timestamp: 2052858726000 TotalCaptureResult.UpscaleInputSize: null TotalCaptureResult.UpscaleOutputSize: null OCAM_CaptureFailInfoUtil: setLostDetailReason, timeStamp: 0, captureJobType: 0, reason: hal_error OCAM_CaptureFailInfoUtil: removePictureState, timeStamp: 0, captureJobType: 0 SysBroadcastReceiver: android.media.ACTION_AUDIO_PLAYBACK_STATE_CHANGED CameraUnit, ApsProcessor: addPictureMeta, timeStamp: 2052858726000, requestId: 82818519 CameraUnit, ApsProcessor: addPictureMeta, isNeedRectify: false OCAM_CaptureProcessor: onDeviceCaptureFailed, capture: 12 SysBroadcastReceiver: EventId=1010003 ID_AUDIO_PLAYBACK_STATE_CHANGED TimeStamp =1760173555543 Intent =Intent { act=android.media.ACTION_AUDIO_PLAYBACK_STATE_CHANGED flg=0x4000010 xflg=0x4 (has extras) } Content =null Pid =0 PkgName =null OCAM_CaptureProcessor: changeCaptureState, prevState: CAPTURE_REQUEST_SENT, newState: FAILED, captureId: 12 CameraUnit, ApsProcessor: addPictureMeta, mCaptureMergeIdentity: 2052858726000, mSensorTimestamp: 2052858726000 OCAM_ThumbnailProcessor: onCaptureStateChanged, capture failed, burst-shot: false OCAM_s_BaseMode: onCaptureStageChanged, captureStage: FAILED, captureId:12, identity:-1 CameraUnit, ApsProcessor: updateUpscaleSize, upscaleInputArray is null CameraUnit, ApsProcessor: updateUpscaleSize, upscaleOutputArray is null OCAM_CommonCapMode: resetWhenCaptureFail, mActivity: com.oplus.camera.Camera@6e5a1ea, mbPaused: false CameraUnit, ApsProcessor: updateUpscaleSize, tag.mSensorSizes: null, result.mPreviewMasterPipeline: null, result.mCaptureMasterPipeline: null, outputSize: 8192x6144, tag.mbScaleEnable: false, offlineNight: false, tag.mbCropEnable: false OCAM_s_BaseMode: resetCaptureDecisionCaptureState, isResetDecision: true OCAM_CommonCapMode: onProcessingTakenPicture, mReceivedSnapNum: 0, isBurstShot: false, isInBurstShotCapturing: false, getMainShutterButtonType: 4, isDelayToDisableBustShot: false, captureStage: -1 CameraUnit, ApsProcessor: addPictureMeta, jpegOrientation: 90, mPicOrientation: 90, x: 0, y: 0 CameraUnit, ApsProcessor: addPictureMeta, mCaptureDecisionResult.mSuperNightScene: 0 OCAM_CommonCapMode: onCaptureFailed, isBurstShot: false, isFailed: true, getFailCode: 0 SubsysBroadcastManager: onReceive action:android.media.ACTION_AUDIO_PLAYBACK_STATE_CHANGED OCAM_IntervalShootingFeature: onCaptureFailed ApsAdapter, CaptureImageCategory: isValid, mergeNum:4, streamNumber:1, size:1, t1:2052858726000, t2:2052858726000 OSService: audioPlaybackStateChange OCAM_CameraUIManager: enableAllCameraView, enable: true, ashed: false OCAM_CaptureProcessor: notifyCaptureFailed OCAM_CameraControlUI: enableCameraShutterButton, enable: true, ashed: false ApsAdapter, ApsCaptureAdapterImpl: addMetaInfo, timestamp: 2052858726000, size: 3, isValid: true OCAM_ThumbnailProcessor: changePreviewCaptureState, isCapturing: true, state: CAPTURE_REQUEST_SENT -> NONE ApsAdapter, ApsCaptureAdapterImpl: addMetadata, first meta arrived: 1760173555544 OCAM_PreviewProcessor: setIsNeedStopView, mbNeedStopView: false -> false ApsAdapter, CaptureImageCategory: isValid, mergeNum:4, streamNumber:1, size:1, t1:2052858726000, t2:2052858726000 OCAM_SurfaceTextureScreenNail: setCacheWhileCapture, state: false ApsAdapter_TRACE, %s: traceBeginSection, msg: ApsCaptureAdapter.addMetadata, timestamp: 2052858726000 mtkpower@impl: [powerd_req] TIMER_MSG_PERF_LOCK_TIMEOUT hdl:3811 ApsAdapter_TRACE, %s: traceEndSection, msg: ApsCaptureAdapter.addMetadata, timestamp: 2052858726000 OCAM_CameraControlUI: enableSwitchCameraButton, enable: true [UAH_CLIENT]: UahRelease, handle:4595 OCAM_CameraControlUI: enableThumbView(), enable: true, ashed: false OCAM_SettingUIContainer: enable, enabled: true, ashed: false OCAM_CameraSettingUI: enableCameraSettingMenu(), enable: true, ashed: false OCAM_CameraDrawerSettingUI: enableCameraSettingMenu, enable: true OCAM_DrawerLayout: setEnabled, mbEnabled: false > true, mDealEventFromOutState: 0 CameraUnit, Camera2Impl: takeNextBurstCapture, mbContinueShot :false, mReceiveCshotNum: 0, mMaxBustShotNum: 20 CameraUnit, CameraUnit_TRACE: traceEndSection, msg: CameraUnit.onCaptureCompleted, timestamp: 2052858726000 URCC_CORE_SERVER: [getRequestFromRunRequestMap] can not get request in runing map for handle:4595 URCC_REQUEST_QUEUE: removeNodeFromQueue is called (removeNodeFromQueue){#23:vendor/oplus/cpu/urcc/halservice/urcccore/UrccRequestQueue.cpp} InputMethodManager: restartInput() CameraUnit, ConsumerImpl: onCaptureStarted, timestamp: 2052925412000, idx: 1, frameNumber: 169, mShutterCallbackCount: 2 OCAM_ModeTitle: setEnable, enable: true CameraUnit, ConsumerImpl: onPictureCaptureProgressed, timestamp: 2052925412000, usePartialMeta: false OCAM_CommonCapMode: resetAfterPictureTaken, isNightProcess: false, isBurstShot: false CameraUnit, Camera2Impl: takeNextBurstCapture, mbContinueShot :false, mReceiveCshotNum: 0, mMaxBustShotNum: 20 CameraUnit, ConsumerImpl: onCaptureStarted, timestamp: 2052971365000, idx: 2, frameNumber: 170, mShutterCallbackCount: 3 OCAM_CameraControlUI: resetShutterButton OCAM_MainShutterButton: setButtonTypeAndInvalidate, mShutterButtonType: 1, mInfoInsideColor: button_color_inside_white, mRingShape: button_shape_ring_none, mInfoRingColor: button_color_ring_default, mInfoInsideRectColor: 3, mbMoreModeShown: true, mBackgroundColor: button_color_background_default, isMbIsOpenGRfalse, isMbIsGRStylefalse OCAM_MainShutterButton: setButtonType, type: 4 => 1 CameraUnit, ConsumerImpl: onPictureCaptureProgressed, timestamp: 2052971365000, usePartialMeta: false touch_boost: enable=0, render_deboost=1, active_time=100, duration=200, idleprefer(TA,FG)=(0,1), util(TA,FG)=(80,0), freq(c0,c1,c2)=(1800000,2300000,0) CameraUnit, Camera2Impl: takeNextBurstCapture, mbContinueShot :false, mReceiveCshotNum: 0, mMaxBustShotNum: 20 OCAM_MainShutterButton: startInsideColorAnimator, mInsideColor: button_color_inside_white, mLastInsideColor: button_color_inside_none, mInsideColorScaleValue: 1.0, mInsideColorAlphaValue: 0.0, needAnimation: true, isRingShapeChanged: false, visible: 0 CameraUnit, ConsumerImpl: onCaptureBufferLost, frameNumber:169 CameraUnit, CameraUnit_TRACE: traceBeginSection, msg: CameraUnit.onCaptureCompleted, timestamp: 2052925412000 CameraUnit, ConsumerImpl: onCaptureCompleted, timestamp: 2052925412000 TotalCaptureResult.UpscaleInputSize: null TotalCaptureResult.UpscaleOutputSize: null AudioFlinger_PlaybackThreadExtImpl: track->client null AFExtImpl: ~TrackInfo() 0xb4000072113309c0 AFExtImpl: clearDumpBuffer() 0xb4000072113309c0, mDumpBufferCount 0 AudioFlinger_PlaybackThread_TrackExtImpl: clearMagicVoiceSoundTrackBuffer, magicVoiceTrack stopped, call stopSoundEffectMixInfoWithBuffer CameraUnit, ApsProcessor: addPictureMeta, timeStamp: 2052925412000, requestId: 82818519 CameraUnit, ApsProcessor: addPictureMeta, isNeedRectify: false AudioFlinger: updateWakeLockUids_l AudioOut_3D uids: CameraUnit, ApsProcessor: addPictureMeta, mCaptureMergeIdentity: 2052858726000, mSensorTimestamp: 2052925412000 CameraUnit, ApsProcessor: updateUpscaleSize, upscaleInputArray is null CameraUnit, ApsProcessor: updateUpscaleSize, upscaleOutputArray is null OCAM_CameraUIManager: enableAllCameraView, enable: true, ashed: false OCAM_CameraControlUI: enableCameraShutterButton, enable: true, ashed: false CameraUnit, ApsProcessor: updateUpscaleSize, tag.mSensorSizes: null, result.mPreviewMasterPipeline: null, result.mCaptureMasterPipeline: null, outputSize: 8192x6144, tag.mbScaleEnable: false, offlineNight: false, tag.mbCropEnable: false OCAM_CameraControlUI: enableSwitchCameraButton, enable: true OCAM_CameraControlUI: enableThumbView(), enable: true, ashed: false ApsAdapter, ApsAdapterImpl: ImageProcessHandler, handleMessage, what: 3 ApsAdapter, ApsAdapterImpl: handleMessage, add frame, timestamp: 2052858726000 ApsAdapter_TRACE, %s: traceBeginSection, msg: ApsCaptureAdapter.addFrame OCAM_SettingUIContainer: enable, enabled: true, ashed: false OCAM_CameraSettingUI: enableCameraSettingMenu(), enable: true, ashed: false CameraUnit, ApsProcessor: addPictureMeta, jpegOrientation: 90, mPicOrientation: 90, x: 0, y: 0 CameraUnit, ApsProcessor: addPictureMeta, mCaptureDecisionResult.mSuperNightScene: 0 OCAM_CameraDrawerSettingUI: enableCameraSettingMenu, enable: true OCAM_DrawerLayout: setEnabled, mbEnabled: true > true, mDealEventFromOutState: 0 ApsAdapter, ApsCaptureAdapterImpl: addFrame, imageCategory timestamp: 2052858726000 ApsAdapter, CaptureImageCategory: isValid, mergeNum:4, streamNumber:1, size:1, t1:2052858726000, t2:2052858726000 ApsAdapter, ApsCaptureAdapterImpl: addFrame, requestTag.mRequestId: 82818519, captureInfoTag.mRequestId:82818519 CameraUnit, ApsProcessor: onFirstCaptureFrameAdd ApsAdapter_TRACE, %s: traceBeginSection, msg: ApsCaptureAdapter.addFrameAndProcessImage IPCThreadState: oneway function results for code 10007 on binder at 0xb40000757f7e47e0 will be dropped but finished with status UNKNOWN_TRANSACTION pd_buf_mgr_imx852mipiraw_chopard_type2: ANN ConvertPDBufFormat_end(508, 3040) PQ_HDR : DpAsyncBlitStream:: thie platform unsupport compress format OCAM_ModeTitle: setEnable, enable: true ApsAdapter, CaptureImageCategory: isValid, mergeNum:4, streamNumber:1, size:1, t1:2052925412000, t2:2052925412000 ApsAdapter, ApsCaptureAdapterImpl: addMetaInfo, timestamp: 2052925412000, size: 3, isValid: true ApsAdapter, CaptureImageCategory: isValid, mergeNum:4, streamNumber:1, size:1, t1:2052925412000, t2:2052925412000 ApsAdapter_TRACE, %s: traceBeginSection, msg: ApsCaptureAdapter.addMetadata, timestamp: 2052925412000 ApsAdapter_TRACE, %s: traceEndSection, msg: ApsCaptureAdapter.addMetadata, timestamp: 2052925412000 AppSenseEventManager: handleMessage dispatcher is null. OCAM_CommonCapMode: resetAfterPictureTaken, isNightProcess: false, isBurstShot: false QosSceneRecognizer: notifyAudioStatusChanged uid: 10168, isOn: false OStatsManager_Calc: noteAudio: uid = 10168, start = false OCAM_CameraControlUI: resetShutterButton QosSceneRecognizer[AudioScene]: [10168, -1, false, audio] OCAM_MainShutterButton: setButtonTypeAndInvalidate, mShutterButtonType: 1, mInfoInsideColor: button_color_inside_white, mRingShape: button_shape_ring_none, mInfoRingColor: button_color_ring_default, mInfoInsideRectColor: 3, mbMoreModeShown: true, mBackgroundColor: button_color_background_default, isMbIsOpenGRfalse, isMbIsGRStylefalse QosSceneRecognizer[AudioScene]: onStateChanged remove uid 10168 OCAM_MainShutterButton: setButtonType, type: 1 => 1 QosSceneRecognizer[AudioScene]: onSceneChangeNotify:Bundle[{reason=audio, package=null, process=null, pid=-1, uid=10168, begin=false}] OCAM_HintManager: hideHint, hintTexts:拍摄完成,正在处理图像…, , removeStringHintSuccess: false QosSceneRecognizer: onSceneStateChange: sceneId 5 uid 10168 pid -1 type 0 reason audio OCAM_CameraUIManager: enableAllCameraView, enable: true, ashed: false QosScheduler[QoSPolicy]: onAudioScene begin=false,pkgName=null,uid=10168,pid=-1,type=0 QosScheduler: executeSceneQosStrategy failed! qos feature no enable OCAM_CameraControlUI: enableCameraShutterButton, enable: true, ashed: false OCAM_CameraControlUI: enableSwitchCameraButton, enable: true OCAM_CameraControlUI: enableThumbView(), enable: true, ashed: false QosSceneRecognizer[VideoScene]: [false, 10168, audio] OCAM_SettingUIContainer: enable, enabled: true, ashed: false OCAM_CameraSettingUI: enableCameraSettingMenu(), enable: true, ashed: false OCAM_CameraDrawerSettingUI: enableCameraSettingMenu, enable: true OCAM_DrawerLayout: setEnabled, mbEnabled: true > true, mDealEventFromOutState: 0 OCAM_ModeTitle: setEnable, enable: true OCAM_ZoomUIContainer: enableOpticalZoomMenu, enable: true OCAM_ApsService: notifyErrorType, failure: {mType: 1, mFrameNumber: -1, mTimestamp: 0, mImageNums: 1, mMergeNums: 4} OCAM_ThumbnailHelper: removeThumbnailFromMap, thumbnail: 0, size: 1 OCAM_ThumbnailHelper: handleCaptureFailed, timestamp: 0 NAS-NormalEvent: onReceive action:android.media.ACTION_AUDIO_PLAYBACK_STATE_CHANGED OplusCameraService: CameraServiceExtImpl.cpp: 5100 getTrdPartyFBJsonValue() getTrdPartyFBJsonValue apkPropName: oplus.video.beauty.com.oplus.camera, prop value: -1 OCAM_OppoCamera_TRACE: traceEndSection, msg: captureX onCaptureFailed failCode: 0 CameraUnit, Camera2Impl: takeNextBurstCapture, mbContinueShot :false, mReceiveCshotNum: 0, mMaxBustShotNum: 20 CameraUnit, CameraUnit_TRACE: traceEndSection, msg: CameraUnit.onCaptureCompleted, timestamp: 2052925412000 CameraUnit, CameraUnit_TRACE: traceBeginSection, msg: CameraUnit.onCaptureCompleted, timestamp: 2052971365000 CameraUnit, ConsumerImpl: onCaptureCompleted, timestamp: 2052971365000 TotalCaptureResult.UpscaleInputSize: null TotalCaptureResult.UpscaleOutputSize: null APS_CORE: [INFO][ BLOCK ] APSClientAdapter.cpp: 1884 fillPreviewParams() index: 0 (imageBuffer: 0x45e6, 17894) APS_CORE: [INFO][ LOGIC ] APSPreviewManager.cpp: 885 checkPreviewBuffer() burstCaptureType: 0, bracketMode: -1, turboRawMode: 0, isForThumbnail: 0, isCachePsl 0 APS_CORE: [INFO][ BLOCK ] APSPreviewManager.cpp: 1651 packPreviewResult() res: 0, size: 953, resultString: [camera_id;INT;0;][capture_mode;STRING;aiHighPixel;][aeTriggerState;INT;0;][star_video_enable;INT;0;][RTB_msg;INT;-1;][sat_master_camera_id;INT;0;][sat_active_map;INT;2;][LSD_is_dirty;INT;0;][video_eis_on;INT;0;][buffer_Timestamp;LONG;2052992099000;][video_last_frame;INT;0;][video_start_interpolation_frame;INT;0;][video_motion_detected;INT;0;][ASD_scene_icon;INT;0;][ASD_hdr_scope;INT;0;][ASD_update_icon;INT;0;][ASD_capture_scene;INT;0;][ASD_tuning_scene;INT;0;][ASD_hdr_scene;INT;2;][Gesture_action_type;INT;0;][identity;LONG;20529920990 android.hardware.thermal@2.0-service.mtk: parseMsg: Get from client TYPE=thermal_hal_notify NAME=SKIN OCAM_CaptureProcessor: completeCapture, capture: 12, success: false, mForegroundCaptureId: 12 android.hardware.thermal@2.0-service.mtk: parseMsg:name.c_str():SKIN android.hardware.thermal@2.0-service.mtk: parseMsg:tz notify:SKIN ApsAdapter, APSClient: postEventFromNative, resultString: [resultinfo_rotation, 90, resultinfo_identity, 2052992099000, resultinfo_app_algoflag, 0, resultinfo_width, 1440, resultinfo_height, 1080, resultinfo_stride, 1472, resultinfo_buffer_type, 17, resultinfo_crop_left, 0, resultinfo_crop_top, 0, resultinfo_crop_right, 1440, resultinfo_crop_bottom, 1080, resultinfo_origin_crop_left, 0, resultinfo_origin_crop_top, 0, resultinfo_origin_crop_right, 0, resultinfo_origin_crop_bottom, 0, resultinfo_message_type, 2, resultinfo_scanline, 0, resultinfo_st_width, 0, resultinfo_st_height, 0, resultinfo_has_st_result, false, resultinfo_is_last_videofram OCAM_CaptureProcessor: changeCaptureState, prevState: FAILED, newState: COMPLETING, captureId: 12 OCAM_s_BaseMode: onCaptureStageChanged, captureStage: COMPLETING, captureId:12, identity:-1 OCAM_s_BaseMode: onCaptureProcessCompleted, ID: 12, success: false, mCaptureId: 12, isBurstShot: false, isCapturingPreview: false, isResetDecision: true OCAM_s_BaseMode: resetCaptureDecisionCaptureState, isResetDecision: true android.hardware.thermal@2.0-service.mtk: Wait to accept a connection OCAM_SurfaceTextureScreenNail: setCacheWhileCapture, state: false OCAM_s_BaseMode: setAllowSwitchMode allowSwitchMode: true OCAM_ZoomUIContainer: enableOpticalZoomMenu, enable: true OCAM_CaptureProcessor: checkCacheCapture: false OCAM_CameraUIManager: setGlobalScreenUIChange, visible: true OCAM_ZoomUIContainer: enableOpticalZoomMenu, enable: true
最新发布
10-22
<think>我们正在分析一个相机拍照流程,用户提到正常拍照需要返回4帧,但当前只回三帧。用户提供了第三帧的详细日志,我们需要分析第三帧是否导致没有第四帧返回。 根据之前的分析,一个完整的回帧流程通常包括四个阶段: 1. 原始图像捕捉帧(raw frame) 2. 预处理或算法输入帧 3. 算法处理与中间帧 4. 最终输出或确认帧 第三帧日志的关键信息: - 时间戳:`2052971365000` - 格式:`format: 32`(可能为YUY2) - 分辨率:`4096x3072` - `ApsCaptureAdapterImpl: addImage, timestamp:2052971365000, size: 3, isValid: false` 表明该帧被标记为无效(isValid: false) 此外,日志中还出现了多个错误和警告: - `PQ_HDR: DpAsyncBlitStream:: thie platform unsupport compress format` 多次出现,表明HDR压缩格式不支持。 - `dequeueHwBuf fail` 错误(在之前的日志中提到过,但在本次第三帧日志中没有直接出现,但相关错误可能延续)。 - `NormalPipe_Thread: [sendCmd] WARNING: size have been reduce to 0x0(0x0) by enque` 和 `NormalPipe_Thread: [configEnquePath] WARNING: mpEnqRoleSequence is empty!` 表明流水线配置问题。 - `paramctrl_validate: DCESO too old, use default setting` 表明参数控制验证失败,使用默认设置。 更重要的是,在第三帧日志中,我们观察到以下关键错误事件: 1. **帧无效标记**:第三帧被标记为`isValid: false`,这将导致后续处理跳过该帧。 2. **缓冲区丢失**:`onCaptureBufferLost`事件出现,例如: - `CameraUnit, ConsumerImpl: onCaptureBufferLost, frameNumber:167` - `CameraUnit, ConsumerImpl: onCaptureBufferLost, frameNumber:169` 表明多个帧的缓冲区丢失,这会导致图像处理中断。 3. **捕获失败通知**:`CameraUnit, ApsProcessor: notifyErrorType, type: DIED_TYPE_CAPTURE_FAILED, timestamp: 2051840544000, imageNum: 1, mergeNum: 4` 明确指示捕获失败,并且合并帧数为4(但实际只有3帧)。 4. **处理流程中断**:日志中多次出现`onCaptureFailed`和`changeCaptureState`到`FAILED`状态,最终导致`OCAM_CaptureProcessor: completeCapture, capture: 12, success: false`,表明整个捕获过程失败。 因此,第三帧的无效和缓冲区丢失是导致第四帧缺失的直接原因。具体分析如下: - **无效帧原因**:第三帧的`isValid: false`可能由元数据缺失(如日志中的`paramctrl_validate`错误)或格式不支持(如重复的PQ_HDR错误)引起。 - **缓冲区丢失**:硬件层(`pdo_buf_mgr`)的缓冲区出队失败导致无法获取处理所需的图像数据。 - **连锁反应**:由于第三帧无效且缓冲区丢失,系统触发了`onCaptureFailed`事件,终止了后续处理(包括第四帧的生成)。 ### 优化建议 - 检查HAL层配置,确保图像格式(如YUY2)与PQ_HDR模块支持的压缩格式兼容。 - 调试`pdo_buf_mgr`的缓冲区分配逻辑,避免`dequeueHwBuf`失败。 - 修复元数据传递管道,避免`paramctrl_validate`因数据过旧而回退到默认设置。 §§相关问题§§ 1. 第三帧的 `format: 32` 具体对应哪种图像格式?如何确认该格式是否被 `PQ_HDR` 模块支持? 2. `paramctrl_validate: DCESO too old` 错误中的参数过期阈值是多少?如何调整验证逻辑以避免使用默认设置? 3. 缓冲区丢失事件 (`onCaptureBufferLost`) 通常由哪些硬件或驱动问题引起?如何通过传感器日志 (`SeninfDrv`) 定位具体原因? 4. 在 `aiHighPixel` 模式下,捕获失败(`DIED_TYPE_CAPTURE_FAILED`)后系统如何重置状态以允许下一次拍摄?重置流程是否可能遗漏资源释放? 5. 日志中多次出现的 `AudioPlaybackStateChanged` 广播是否抢占CPU资源,进而加剧了相机进程的处理延迟?如何优化进程调度优先级? </think>该日志显示第三帧(timestamp: 2052971365000)触发了系统级错误,导致拍照流程中断且缺失第四帧。以下是关键问题分析及第四帧缺失的直接原因: ### 第三帧核心问题定位 1. **帧有效性标记失败** - `ApsCaptureAdapterImpl: addImage, timestamp:2052971365000, size: 3, isValid: false` 明确该帧被标记无效。 - 根本原因: - 元数据缺失:`paramctrl_validate: DCESO too old, use default setting` 表示动态参数过期,导致算法使用默认值而非实时数据。 - 格式冲突:`PQ_HDR: unsupport compress format` 重复出现,与图像格式 `format: 32`(推测为 YUY2)不兼容。 2. **硬件缓冲区致命错误** - `pd_buf_mgr: ANN ConvertPDBufFormat_end(508, 3040)` 显示相位检测缓冲区转换异常(尺寸不匹配)。 - 连带效应:`NormalPipe_Thread: [configEnquePath] WARNING: mpEnqRoleSequence is empty!` 表明流水线因缓冲区错误中断,无法传递数据至下一阶段。 3. **捕获流程强制终止** - 系统主动触发失败响应: ```java CameraUnit, ApsProcessor: notifyErrorType, type: DIED_TYPE_CAPTURE_FAILED, timestamp: 2051840544000, imageNum: 1, mergeNum: 4 CameraUnit, Camera2Impl: onCaptureFailed, fail reason:0 ``` - 状态机切换至失败状态:`OCAM_CaptureProcessor: changeCaptureState, prevState: CAPTURE_REQUEST_SENT, newState: FAILED` ### 第四帧缺失的直接原因 - **算法处理链断裂**:第三帧无效导致多帧合成中断(`mMergeNum: 4` 但仅有3帧),触发 `ApsCaptureAdapterImpl: mbCaptureFail: true`。 - **资源提前释放**:音频模块(`AudioBoost: removeActiveTrack`)和传感器驱动(`SeninfDrv`)释放资源,占用本应用于第四帧处理的硬件通道。 - **状态机锁定**:系统转入错误处理流程(`OCAM_CommonCapMode: resetWhenCaptureFail`),跳过第四帧生成阶段。 ### 根本矛盾:元数据与硬件的双重失效 | 问题模块 | 错误表现 | 影响范围 | |---------|---------|---------| | **参数控制器** | `DCESO too old`(动态校准过期) | 算法无法获取实时曝光/对焦数据 | | **HDR流水线** | `PQ_HDR: unsupport compress format` | 格式32(YUY2)不被HDR模块支持 | | **相位检测缓冲区** | `ConvertPDBufFormat_end` 尺寸异常 | PDAF硬件输出与ISP输入不匹配 | | **调度系统** | `touch_boost: enable=0` 降频 | CPU资源不足导致实时性丢失 | ### 解决方案建议 1. **紧急规避**: - 禁用冲突格式:强制将 `format: 32` 切换为兼容格式(如 NV21)。 - 延长参数有效期:修改 `paramctrl_validate` 阈值,避免过早回退到默认设置。 2. **长期修复**: - 升级传感器驱动:修复 `pd_buf_mgr` 的缓冲区尺寸校验逻辑。 - 增加格式映射表:在HAL层实现 `PQ_HDR` 格式兼容性自动转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值