#ifndef WEBRTCPUSH_CONFIG_H
#define WEBRTCPUSH_CONFIG_H

/*
 * WEBRTCPUSH_USE_MPP — 推流方式（与 Chromium 浏览器互斥，共用 thread_open_browser 线程）
 *   0：走 Chromium 浏览器推流（opencamsh，原有逻辑）
 *   1：走 libdatachannel 原生推流（摄像头 → MPP/x264 → libdatachannel）
 *
 * 原生分支：v4l2 采集 → mpph264enc（或 x264enc 回退）→ libdatachannel 发送。
 */
#define WEBRTCPUSH_USE_MPP 1

/* 正常固定 24fps；弱网以降码率为主，后续若启用动态帧率也不得低于 22fps。 */
#define WEBRTCPUSH_H264_FPS 24
#define WEBRTCPUSH_H264_MIN_FPS 22
#define WEBRTCPUSH_H264_GOP (WEBRTCPUSH_H264_FPS * 3)  /* 3s; PLI still requests IDR */

/* 与 gst_webrtc_pipeline / jywy 浏览器推流对齐的码率策略 */
#define WEBRTCPUSH_INITIAL_BITRATE 1400000U
#define WEBRTCPUSH_MIN_BITRATE 500000U
#define WEBRTCPUSH_MAX_BITRATE 3200000U
#define WEBRTCPUSH_REMB_UTIL_PERCENT 80U
#define WEBRTCPUSH_REMB_DOWN_MIN_STEP 100000U
#define WEBRTCPUSH_REMB_DOWN_CONFIRMATIONS 3U
#define WEBRTCPUSH_REMB_SEVERE_PERCENT 65U
#define WEBRTCPUSH_BITRATE_RAMP_UP_MS 2500U
#define WEBRTCPUSH_BITRATE_RAMP_DOWN_MS 500U
#define WEBRTCPUSH_PACING_HEADROOM_PERCENT 125U
#define WEBRTCPUSH_PACING_INTERVAL_MS 5U
#define WEBRTCPUSH_PACING_MAX_BITRATE 4000000U
#define WEBRTCPUSH_PACING_MAX_QUEUE_MS 300U
#define WEBRTCPUSH_PACING_GUARD_COOLDOWN_MS 1000U

/* RTP 分片与 NACK（MTU=1200，留 SRTP/DTLS/FU 余量） */
#define WEBRTCPUSH_RTP_MAX_FRAGMENT 1050U
#define WEBRTCPUSH_NACK_PACKETS 512U

/* PLI/IDR 节流：避免频繁 force-key-unit 拉高瞬时码率 */
#define WEBRTCPUSH_PLI_IDR_THROTTLE_MS 200U

/* 周期性推流指标日志间隔 */
#define WEBRTCPUSH_STATS_LOG_INTERVAL_MS 8000U

/* 连续发送失败退避与上限 */
#define WEBRTCPUSH_SEND_FAIL_RESET 30U

/* H.264 Baseline@L3.1，兼容性最好 */
#define WEBRTCPUSH_H264_PROFILE_LEVEL_ID "42e01f"

/* 拉帧线程与发送线程之间的有界队列（leaky，满则丢最旧帧） */
#define WEBRTCPUSH_SEND_QUEUE_DEPTH 2U

/* 管道缓冲：运动场景需适度缓存，过低易 pull timeout / 糊屏 */
#define WEBRTCPUSH_MPP_PRE_ENC_BUFFERS 1   /* 编码前 leaky，低延迟 */
#define WEBRTCPUSH_MPP_POST_ENC_BUFFERS 1  /* 编码后保留 AU */
#define WEBRTCPUSH_APPSINK_MAX_BUFFERS 1

/* 视频采集：auto | /dev/videoN | test（videotestsrc 测试图案） */
#define WEBRTCPUSH_VIDEO_DEVICE "auto"

/*
 * 麦克风采集（仅上行推流到手机，与车机喇叭播放 audioplay/tts 无关）。
 * 留空表示不推音频；hw:X,Y 运行时会转为 plughw:X,Y，并优先经 Pulse 的 input 源采集。
 */
#define WEBRTCPUSH_ALSA_DEVICE "auto"

/* Opus 音频编码参数（上行麦克风推流） */
#define WEBRTCPUSH_OPUS_BITRATE 64000U
#define WEBRTCPUSH_OPUS_CLOCKRATE 48000U
#define WEBRTCPUSH_OPUS_CHANNELS 1
#define WEBRTCPUSH_AUDIO_QUEUE_DEPTH 8U

/*
 * 设备侧 DataChannel（myDataChannel）与手机 createDataChannel('init') 争用 SCTP，
 * 易触发 sctpenc association error 并导致管道闪断/进程崩溃。仅推流可不建。
 */
#define WEBRTCPUSH_ENABLE_DATACHANNEL 0

/* WebRTC 信令 WebSocket 主机（路径 /websocket?dev=设备号） */
#define WEBRTCPUSH_SIGNAL_HOST "signal.yd-ss.com"

#define WEBRTCPUSH_DEBUG 0

#endif
