chatgui-android: видеосообщения — запись, выбор камеры, качество, подсветка

- C-слой: video_sender (content_type video/mp4, media_video=0 без FFmpeg)
- chat_msg_submit: duration/width/height для метаданных видео в теле сообщения
- JNI: nativeVideoSend + NativeLib/Repository/ViewModel
- VideoRecordScreen: CameraX VideoCapture, 4 пресета качества (разрешение+битрейт),
  выбор камеры (селфи/широкая/обычная/макро/теле по фокусу), тумблер подсветки,
  запись/пауза/отправить, лимит 60с
- InputBar: единая кнопка — короткий тап переключает voice/video, удержание — запись
- режим камеры/микрофона сохраняется в ViewModel
This commit is contained in:
evgeny committed 2026-09-08 18:38:18 +03:00
1 parent fe1726ebea
commit 73e81032bc
16 files changed
+788 -33

No files matched your search

+3
View File
@@ -33,6 +33,9 @@ struct chat_msg_submit {
char media_dest[1024];
uint8_t media_copy;
uint8_t media_video; /* 1 = подготовить как видео (пробинг+транскод) */
int duration_ms; /* видео: длительность (0 = неизвестно) */
int width; /* видео: ширина */
int height; /* видео: высота */
uint8_t* data;
uint32_t data_len;
uint64_t timestamp;
+3
View File
@@ -269,6 +269,9 @@ void chat_core_submit_media_message(struct chat_msg_submit* req) {
snprintf(mctx->content_type, sizeof(mctx->content_type), "%s", req->content_type);
snprintf(mctx->media_dest, sizeof(mctx->media_dest), "%s", req->media_dest);
mctx->timestamp = req->timestamp;
mctx->duration_ms = req->duration_ms;
mctx->width = req->width;
mctx->height = req->height;
if (req->data && req->data_len > 0) {
mctx->msg_data_len = req->data_len < sizeof(mctx->msg_data) ? req->data_len : sizeof(mctx->msg_data) - 1;
memcpy(mctx->msg_data, req->data, mctx->msg_data_len);