# pragma once
# include <vector>
# include "cereal/messaging/messaging.h"
# include "cereal/services.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/util.h"
# include "system/loggerd/logger.h"
constexpr int MAIN_FPS = 20 ;
const int MAIN_BITRATE = 1e7 ;
const int LIVESTREAM_BITRATE = 1e6 ;
const int QCAM_BITRATE = 256000 ;
# 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 ;
constexpr char PRESERVE_ATTR_NAME [ ] = " user.preserve " ;
constexpr char PRESERVE_ATTR_VALUE = ' 1 ' ;
class EncoderInfo {
public :
const char * publish_name ;
const char * filename = NULL ;
bool record = true ;
int frame_width = 1928 ;
int frame_height = 1208 ;
int fps = MAIN_FPS ;
int bitrate = MAIN_BITRATE ;
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 {
public :
const char * thread_name ;
int fps = MAIN_FPS ;
CameraType type ;
VisionStreamType stream_type ;
std : : vector < EncoderInfo > encoder_infos ;
} ;
const EncoderInfo main_road_encoder_info = {
. publish_name = " roadEncodeData " ,
. filename = " fcamera.hevc " ,
INIT_ENCODE_FUNCTIONS ( RoadEncode ) ,
} ;
const EncoderInfo main_wide_road_encoder_info = {
. publish_name = " wideRoadEncodeData " ,
. filename = " ecamera.hevc " ,
INIT_ENCODE_FUNCTIONS ( WideRoadEncode ) ,
} ;
const EncoderInfo main_driver_encoder_info = {
. publish_name = " driverEncodeData " ,
. filename = " dcamera.hevc " ,
. record = Params ( ) . getBool ( " RecordFront " ) ,
INIT_ENCODE_FUNCTIONS ( DriverEncode ) ,
} ;
const EncoderInfo stream_road_encoder_info = {
. publish_name = " livestreamRoadEncodeData " ,
. encode_type = cereal : : EncodeIndex : : Type : : QCAMERA_H264 ,
. record = false ,
. bitrate = LIVESTREAM_BITRATE ,
INIT_ENCODE_FUNCTIONS ( LivestreamRoadEncode ) ,
} ;
const EncoderInfo stream_wide_road_encoder_info = {
. publish_name = " livestreamWideRoadEncodeData " ,
. encode_type = cereal : : EncodeIndex : : Type : : QCAMERA_H264 ,
. record = false ,
. bitrate = LIVESTREAM_BITRATE ,
INIT_ENCODE_FUNCTIONS ( LivestreamWideRoadEncode ) ,
} ;
const EncoderInfo stream_driver_encoder_info = {
. publish_name = " livestreamDriverEncodeData " ,
. encode_type = cereal : : EncodeIndex : : Type : : QCAMERA_H264 ,
. record = false ,
. bitrate = LIVESTREAM_BITRATE ,
INIT_ENCODE_FUNCTIONS ( LivestreamDriverEncode ) ,
} ;
const EncoderInfo qcam_encoder_info = {
. publish_name = " qRoadEncodeData " ,
. filename = " qcamera.ts " ,
. bitrate = QCAM_BITRATE ,
. encode_type = cereal : : EncodeIndex : : Type : : QCAMERA_H264 ,
. frame_width = 526 ,
. frame_height = 330 ,
INIT_ENCODE_FUNCTIONS ( QRoadEncode ) ,
} ;
const LogCameraInfo road_camera_info {
. thread_name = " road_cam_encoder " ,
. type = RoadCam ,
. stream_type = VISION_STREAM_ROAD ,
. encoder_infos = { main_road_encoder_info , qcam_encoder_info }
} ;
const LogCameraInfo wide_road_camera_info {
. thread_name = " wide_road_cam_encoder " ,
. type = WideRoadCam ,
. 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 ,
. stream_type = VISION_STREAM_DRIVER ,
. encoder_infos = { main_driver_encoder_info }
} ;
const LogCameraInfo stream_road_camera_info {
. thread_name = " road_cam_encoder " ,
. type = RoadCam ,
. stream_type = VISION_STREAM_ROAD ,
. encoder_infos = { stream_road_encoder_info }
} ;
const LogCameraInfo stream_wide_road_camera_info {
. thread_name = " wide_road_cam_encoder " ,
. type = WideRoadCam ,
. stream_type = VISION_STREAM_WIDE_ROAD ,
. encoder_infos = { stream_wide_road_encoder_info }
} ;
const LogCameraInfo stream_driver_camera_info {
. thread_name = " driver_cam_encoder " ,
. type = DriverCam ,
. stream_type = VISION_STREAM_DRIVER ,
. encoder_infos = { stream_driver_encoder_info }
} ;
const LogCameraInfo cameras_logged [ ] = { road_camera_info , wide_road_camera_info , driver_camera_info } ;
const LogCameraInfo stream_cameras_logged [ ] = { stream_road_camera_info , stream_wide_road_camera_info , stream_driver_camera_info } ;