From d9927380ed7c8366f762049be9f3fee225860833 Mon Sep 17 00:00:00 2001 From: liyujie <2352380935@qq.com> Date: Thu, 28 Aug 2025 12:04:16 +0000 Subject: [PATCH] [2/4]解决USB摄像头打开相机预览界面绿屏 --- android/hardware/aw/camera/3_4/v4l2_camera.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 47 insertions(+), 9 deletions(-) diff --git a/android/hardware/aw/camera/3_4/v4l2_camera.cpp b/android/hardware/aw/camera/3_4/v4l2_camera.cpp index e717bca..174d996 100755 --- a/android/hardware/aw/camera/3_4/v4l2_camera.cpp +++ b/android/hardware/aw/camera/3_4/v4l2_camera.cpp @@ -57,7 +57,8 @@ V4L2Camera* V4L2Camera::NewV4L2Camera( int id, - std::shared_ptr<CCameraConfig> pCameraCfg) { + std::shared_ptr<CCameraConfig> pCameraCfg, + bool mergeStreamStatus) { HAL_LOG_ENTER(); // Select one stream for fill metadata. // The path has been pick the stream for query format. @@ -80,13 +81,15 @@ return new V4L2Camera(id, std::move(v4l2_wrapper), std::move(metadata), - std::move(pCameraCfg)); + std::move(pCameraCfg), + mergeStreamStatus); } V4L2Camera::V4L2Camera(int id, std::shared_ptr<V4L2Wrapper> v4l2_wrapper, std::unique_ptr<Metadata> metadata, - std::shared_ptr<CCameraConfig> pCameraCfg) + std::shared_ptr<CCameraConfig> pCameraCfg, + bool mergeStreamStatus) : default_camera_hal::Camera(id), mCameraConfig(std::move(pCameraCfg)), device_(std::move(v4l2_wrapper)), @@ -101,7 +104,9 @@ FlashStatusFlag(0), MarkFrameNum(0), curFlashStateE(CAM_FLASH_STATE_MAX), - curFlashModeE(CAM_FLASH_MODE_MAX) { + curFlashModeE(CAM_FLASH_MODE_MAX), + merge_stream_status_(mergeStreamStatus), + is_merge_stream_flag(false){ HAL_LOG_ENTER(); instance = std::shared_ptr<V4L2Camera>(this); @@ -1224,7 +1229,7 @@ return true; } -int V4L2Camera::sResultCallback(uint32_t frameNumber, struct timeval /*ts*/) { +int V4L2Camera::sResultCallback(uint32_t frameNumber, struct timeval ts) { std::unique_lock<std::mutex> lock(frameNumber_request_lock_); int res = 0; int ret = 0; @@ -1272,6 +1277,17 @@ HAL_LOGE("Failed to update metadata tag 0x%x", ANDROID_JPEG_THUMBNAIL_SIZE); } + } + + if(!is_merge_stream_flag) + { + int64_t timestamp = 0; + timestamp = ts.tv_sec * 1000000000ULL + ts.tv_usec*1000; + ret = (&map_entry->second->settings)->update(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1); + if (ret) { + HAL_LOGE("Failed to update metadata tag 0x%x", ANDROID_SENSOR_TIMESTAMP); + } + res = 404; } if (mCameraConfig->supportFlashMode()) { @@ -1533,6 +1549,19 @@ while (!wfequest_queue_stream_.empty()) { if (rfequest_queue_stream_.front()->frame_number == wfequest_queue_stream_.front()->frame_number) { + + if (!is_merge_stream_flag) { + int64_t timestamp_w = 0; + timestamp_w = ts.tv_sec * 1000000000ULL + ts.tv_usec*1000; + ret = (&map_entry->second->settings)->update( + ANDROID_SENSOR_TIMESTAMP, ×tamp_w, 1); + if (ret) { + HAL_LOGE("Failed to update metadata tag 0x%x", + ANDROID_SENSOR_TIMESTAMP); + } + res = 404; + } + completeRequest(wfequest_queue_stream_.front(), res); wfequest_queue_stream_.pop(); rfequest_queue_stream_.pop(); @@ -1638,7 +1667,8 @@ stream_config->streams[retIndex]->height, stream_config->streams[retIndex]->format, stream_config->streams[retIndex]->usage, - isBlob)); + isBlob, + merge_stream_status_)); if (nullptr == stream_config->streams[retIndex]->priv) { HAL_LOGE("Failed create main stream!"); return -EINVAL; @@ -1676,7 +1706,8 @@ stream_config->streams[retIndex]->height, stream_config->streams[retIndex]->format, stream_config->streams[retIndex]->usage, - isBlob)); + isBlob, + merge_stream_status_)); if (nullptr == stream_config->streams[retIndex]->priv) { HAL_LOGE("Failed create sub stream!"); return -EINVAL; @@ -1731,7 +1762,8 @@ stream_config->streams[thirdIndex]->height, stream_config->streams[thirdIndex]->format, stream_config->streams[thirdIndex]->usage, - isBlob)); + isBlob, + merge_stream_status_)); if (nullptr == stream_config->streams[thirdIndex]->priv) { HAL_LOGE("Failed create third stream!"); @@ -1772,7 +1804,8 @@ stream_config->streams[thirdIndex]->height, stream_config->streams[thirdIndex]->format, stream_config->streams[thirdIndex]->usage, - isBlob)); + isBlob, + merge_stream_status_)); camera3_stream_t* subIndexStream = stream_config->streams[subIndex]; camera3_stream_t* thirdIndexStream = stream_config->streams[thirdIndex]; @@ -1829,6 +1862,7 @@ for (uint32_t i = 0; i < stream_config->num_streams; ++i) { fillStreamInfo(stream_config->streams[i]); } + is_merge_stream_flag = false; for (uint32_t i = 0; i < stream_config->num_streams; ++i) { HAL_LOGD("stream %d is format %d(%s), width %d, height %d, " "usage %d(%s), stream_type %d, data_space %d, num_streams:%d.", @@ -1842,6 +1876,10 @@ stream_config->streams[i]->stream_type, stream_config->streams[i]->data_space, stream_config->num_streams); + if(stream_config->streams[i]->width * stream_config->streams[i]->height > + 4000*3000) { + is_merge_stream_flag = true; + } } HAL_LOGI("setupStreams finished"); -- Gitblit v1.6.2