1 /* 2 * Copyright (c) 2019 Rockchip Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 */ 17 #ifndef _CAPTURE_RAW_DATA_H_ 18 #define _CAPTURE_RAW_DATA_H_ 19 20 #include "rk_aiq_pool.h" 21 #include "xcam_mutex.h" 22 #include "v4l2_buffer_proxy.h" 23 #include "rk_isp20_hw.h" 24 #include "v4l2_device.h" 25 using namespace XCam; 26 27 namespace RkCam { 28 29 #define CAPTURERAW_SUBM (0x80) 30 31 struct capture_fmt { 32 u32 fourcc; 33 u8 bayer_fmt; 34 u8 pcpp; 35 u8 bpp[VIDEO_MAX_PLANES]; 36 }; 37 class CaptureRawData 38 { 39 public: 40 virtual ~CaptureRawData (); 41 CaptureRawData(const CaptureRawData&)=delete; 42 CaptureRawData& operator=(const CaptureRawData&)=delete; 43 explicit CaptureRawData(int32_t camId); getInstance()44 static CaptureRawData& getInstance() { 45 static CaptureRawData instance; 46 return instance; 47 } 48 int detect_capture_raw_status(uint32_t sequence, bool first_trigger); 49 int update_capture_raw_status(bool first_trigger); 50 int dynamic_capture_raw(int i, uint32_t sequence, 51 SmartPtr<V4l2BufferProxy> buf_proxy, 52 SmartPtr<V4l2Buffer> &v4l2buf, 53 int mipi_dev_max, 54 int working_mode, 55 SmartPtr<V4l2Device> dev); 56 XCamReturn capture_raw_ctl(capture_raw_t type, int count = 0, const char* capture_dir = nullptr, char* output_dir = nullptr); 57 XCamReturn notify_capture_raw(); 58 void save_metadata_and_register( 59 uint32_t frameId, 60 rkisp_effect_params_v20& ispParams, 61 SmartPtr<RkAiqSensorExpParamsProxy>& expParams, 62 SmartPtr<RkAiqAfInfoProxy>& afParams, 63 int working_mode 64 ); is_need_save_metadata_and_register()65 bool is_need_save_metadata_and_register() { 66 return _capture_metadata_num > 0 ? true : false; 67 } 68 private: 69 CaptureRawData (); 70 int calculate_stride_per_line(const struct capture_fmt& fmt, 71 uint32_t& bytesPerLine, SmartPtr<V4l2Device> dev); 72 const struct capture_fmt* find_fmt(const uint32_t pixelformat); 73 XCamReturn creat_raw_dir(const char* path); 74 XCamReturn write_frame_header_to_raw(FILE* fp, 75 int dev_index, int sequence, int working_mode, SmartPtr<V4l2Device> dev); 76 XCamReturn write_raw_to_file(FILE* fp, int dev_index, 77 int sequence, void* userptr, int size); 78 void write_reg_to_file(uint32_t base_addr, uint32_t offset_addr, 79 int len, int sequence); 80 void write_metadata_to_file(const char* dir_path, uint32_t frame_id, 81 rkisp_effect_params_v20& ispParams, 82 SmartPtr<RkAiqSensorExpParamsProxy>& expParams, 83 SmartPtr<RkAiqAfInfoProxy>& afParams, 84 int working_mode); 85 bool get_value_from_file(const char* path, int& value, uint32_t& frameId); 86 bool set_value_to_file(const char* path, int value, uint32_t sequence = 0); 87 88 private: 89 uint32_t sns_width; 90 uint32_t sns_height; 91 uint32_t pixelformat; 92 uint32_t _stride_perline; 93 char raw_dir_path[64]; 94 char user_set_raw_dir[64]; 95 bool _is_raw_dir_exist; 96 bool _is_capture_raw; 97 sint32_t _capture_raw_num; 98 sint32_t _capture_metadata_num; 99 static const struct capture_fmt csirx_fmts[]; 100 Mutex _capture_image_mutex; 101 Cond _capture_image_cond; 102 capture_raw_t _capture_raw_type; 103 int32_t _camId; 104 }; 105 106 107 } 108 #endif 109