mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 09:01:54 +08:00
feat(video): 事务化切换与前端统一编排,增强视频输入格式支持
- 后端:切换事务+transition_id,/stream/mode 返回 switching/transition_id 与实际 codec - 事件:新增 mode_switching/mode_ready,config/webrtc_ready/mode_changed 关联事务 - 编码/格式:扩展 NV21/NV16/NV24/RGB/BGR 输入与转换链路,RKMPP direct input 优化 - 前端:useVideoSession 统一切换,失败回退真实切回 MJPEG,菜单格式同步修复 - 清理:useVideoStream 降级为 MJPEG-only
This commit is contained in:
@@ -14,11 +14,15 @@
|
||||
enum AVPixelFormat {
|
||||
AV_PIX_FMT_YUV420P = 0,
|
||||
AV_PIX_FMT_YUYV422 = 1,
|
||||
AV_PIX_FMT_RGB24 = 2,
|
||||
AV_PIX_FMT_BGR24 = 3,
|
||||
AV_PIX_FMT_YUV422P = 4, // planar YUV 4:2:2
|
||||
AV_PIX_FMT_YUVJ420P = 12, // JPEG full-range YUV420P (same layout as YUV420P)
|
||||
AV_PIX_FMT_YUVJ422P = 13, // JPEG full-range YUV422P (same layout as YUV422P)
|
||||
AV_PIX_FMT_NV12 = 23,
|
||||
AV_PIX_FMT_NV21 = 24,
|
||||
AV_PIX_FMT_NV16 = 101,
|
||||
AV_PIX_FMT_NV24 = 188,
|
||||
};
|
||||
|
||||
int av_log_get_level(void);
|
||||
@@ -26,4 +30,4 @@ void av_log_set_level(int level);
|
||||
void hwcodec_set_av_log_callback();
|
||||
void hwcodec_set_flag_could_not_find_ref_with_poc();
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -388,7 +388,9 @@ private:
|
||||
}
|
||||
_exit:
|
||||
av_packet_unref(pkt_);
|
||||
return encoded ? 0 : -1;
|
||||
// If no packet is produced for this input frame, treat it as EAGAIN.
|
||||
// This is not a fatal error: encoders may buffer internally (e.g., startup delay).
|
||||
return encoded ? 0 : AVERROR(EAGAIN);
|
||||
}
|
||||
|
||||
int fill_frame(AVFrame *frame, uint8_t *data, int data_length,
|
||||
@@ -511,4 +513,4 @@ extern "C" void ffmpeg_ram_request_keyframe(FFmpegRamEncoder *encoder) {
|
||||
} catch (const std::exception &e) {
|
||||
LOG_ERROR(std::string("ffmpeg_ram_request_keyframe failed, ") + std::string(e.what()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user