|
|
|
@ -1,42 +1,25 @@ |
|
|
|
|
#pragma once |
|
|
|
|
|
|
|
|
|
#include <unistd.h> |
|
|
|
|
|
|
|
|
|
#include <atomic> |
|
|
|
|
#include <cassert> |
|
|
|
|
#include <cerrno> |
|
|
|
|
#include <condition_variable> |
|
|
|
|
#include <mutex> |
|
|
|
|
#include <string> |
|
|
|
|
#include <thread> |
|
|
|
|
#include <unordered_map> |
|
|
|
|
#include <utility> |
|
|
|
|
|
|
|
|
|
#include "cereal/messaging/messaging.h" |
|
|
|
|
#include "cereal/services.h" |
|
|
|
|
#include "cereal/visionipc/visionipc.h" |
|
|
|
|
#include "cereal/visionipc/visionipc_client.h" |
|
|
|
|
#include "system/camerad/cameras/camera_common.h" |
|
|
|
|
#include "system/hardware/hw.h" |
|
|
|
|
#include "common/params.h" |
|
|
|
|
#include "common/swaglog.h" |
|
|
|
|
#include "common/timing.h" |
|
|
|
|
#include "common/util.h" |
|
|
|
|
#include "system/hardware/hw.h" |
|
|
|
|
|
|
|
|
|
#include "system/loggerd/encoder/encoder.h" |
|
|
|
|
#include "system/loggerd/logger.h" |
|
|
|
|
#ifdef QCOM2 |
|
|
|
|
#include "system/loggerd/encoder/v4l_encoder.h" |
|
|
|
|
#define Encoder V4LEncoder |
|
|
|
|
#else |
|
|
|
|
#include "system/loggerd/encoder/ffmpeg_encoder.h" |
|
|
|
|
#define Encoder FfmpegEncoder |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
constexpr int MAIN_FPS = 20; |
|
|
|
|
const int MAIN_BITRATE = 10000000; |
|
|
|
|
|
|
|
|
|
#define NO_CAMERA_PATIENCE 500 // fall back to time-based rotation if all cameras are dead
|
|
|
|
|
#define NO_CAMERA_PATIENCE 500 // fall back to time-based rotation if all cameras are dead
|
|
|
|
|
|
|
|
|
|
#define INIT_ENCODE_FUNCTIONS(encode_type) \ |
|
|
|
|
.get_encode_data_func = &cereal::Event::Reader::get##encode_type##Data, \
|
|
|
|
|
.set_encode_idx_func = &cereal::Event::Builder::set##encode_type##Idx, \
|
|
|
|
|
.init_encode_data_func = &cereal::Event::Builder::init##encode_type##Data |
|
|
|
|
|
|
|
|
|
const bool LOGGERD_TEST = getenv("LOGGERD_TEST"); |
|
|
|
|
const int SEGMENT_LENGTH = LOGGERD_TEST ? atoi(getenv("LOGGERD_SEGMENT_LENGTH")) : 60; |
|
|
|
@ -50,9 +33,11 @@ public: |
|
|
|
|
int frame_height = 1208; |
|
|
|
|
int fps = MAIN_FPS; |
|
|
|
|
int bitrate = MAIN_BITRATE; |
|
|
|
|
cereal::EncodeIndex::Type encode_type = cereal::EncodeIndex::Type::FULL_H_E_V_C; |
|
|
|
|
cereal::EncodeIndex::Type encode_type = Hardware::PC() ? cereal::EncodeIndex::Type::BIG_BOX_LOSSLESS |
|
|
|
|
: cereal::EncodeIndex::Type::FULL_H_E_V_C; |
|
|
|
|
::cereal::EncodeData::Reader (cereal::Event::Reader::*get_encode_data_func)() const; |
|
|
|
|
void (cereal::Event::Builder::*set_encode_idx_func)(::cereal::EncodeIndex::Reader); |
|
|
|
|
cereal::EncodeData::Builder (cereal::Event::Builder::*init_encode_data_func)(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
class LogCameraInfo { |
|
|
|
@ -67,21 +52,18 @@ public: |
|
|
|
|
const EncoderInfo main_road_encoder_info = { |
|
|
|
|
.publish_name = "roadEncodeData", |
|
|
|
|
.filename = "fcamera.hevc", |
|
|
|
|
.get_encode_data_func = &cereal::Event::Reader::getRoadEncodeData, |
|
|
|
|
.set_encode_idx_func = &cereal::Event::Builder::setRoadEncodeIdx, |
|
|
|
|
INIT_ENCODE_FUNCTIONS(RoadEncode), |
|
|
|
|
}; |
|
|
|
|
const EncoderInfo main_wide_road_encoder_info = { |
|
|
|
|
.publish_name = "wideRoadEncodeData", |
|
|
|
|
.filename = "ecamera.hevc", |
|
|
|
|
.get_encode_data_func = &cereal::Event::Reader::getWideRoadEncodeData, |
|
|
|
|
.set_encode_idx_func = &cereal::Event::Builder::setWideRoadEncodeIdx, |
|
|
|
|
INIT_ENCODE_FUNCTIONS(WideRoadEncode), |
|
|
|
|
}; |
|
|
|
|
const EncoderInfo main_driver_encoder_info = { |
|
|
|
|
.publish_name = "driverEncodeData", |
|
|
|
|
.filename = "dcamera.hevc", |
|
|
|
|
.record = Params().getBool("RecordFront"), |
|
|
|
|
.get_encode_data_func = &cereal::Event::Reader::getDriverEncodeData, |
|
|
|
|
.set_encode_idx_func = &cereal::Event::Builder::setDriverEncodeIdx, |
|
|
|
|
INIT_ENCODE_FUNCTIONS(DriverEncode), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const EncoderInfo qcam_encoder_info = { |
|
|
|
@ -91,8 +73,7 @@ const EncoderInfo qcam_encoder_info = { |
|
|
|
|
.encode_type = cereal::EncodeIndex::Type::QCAMERA_H264, |
|
|
|
|
.frame_width = 526, |
|
|
|
|
.frame_height = 330, |
|
|
|
|
.get_encode_data_func = &cereal::Event::Reader::getQRoadEncodeData, |
|
|
|
|
.set_encode_idx_func = &cereal::Event::Builder::setQRoadEncodeIdx, |
|
|
|
|
INIT_ENCODE_FUNCTIONS(QRoadEncode), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -109,7 +90,7 @@ const LogCameraInfo wide_road_camera_info{ |
|
|
|
|
.stream_type = VISION_STREAM_WIDE_ROAD, |
|
|
|
|
.encoder_infos = {main_wide_road_encoder_info} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const LogCameraInfo driver_camera_info{ |
|
|
|
|
.thread_name = "driver_cam_encoder", |
|
|
|
|
.type = DriverCam, |
|
|
|
@ -118,4 +99,3 @@ const LogCameraInfo driver_camera_info{ |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const LogCameraInfo cameras_logged[] = {road_camera_info, wide_road_camera_info, driver_camera_info}; |
|
|
|
|
|
|
|
|
|