mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-09-12 18:44:25 +08:00
支持原生 HDMI 和 UVC 缓冲区导出,增加同步 RKMPP 编码及可选 MJPEG 硬件转码。 校验帧布局和缓冲区租约,在 DMA 不可用或编码失败时回退到复制通路。 保留自定义码率和 GOP 策略,重开采集时同步 HDMI 源帧率,并区分 UVC 超时状态。 验证:88 个视频测试通过(含 4 个新增回归测试);ARM64 cargo check --tests 通过。
32 lines
1.5 KiB
C
32 lines
1.5 KiB
C
#pragma once
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct RkmppDmaEncoder RkmppDmaEncoder;
|
|
// format: 0=NV12, 1=BGR24, 2=YUYV, 3=RGB24 (byte stride), 4=MJPEG (stride ignored).
|
|
// codec: 0=H264, 1=HEVC. MJPEG is decoded to hardware NV12, then encoded.
|
|
RkmppDmaEncoder *rkmpp_dma_new(int width, int height, int stride, int format,
|
|
int codec, int fps, int kbps, int gop,
|
|
const int *fds, const size_t *sizes, size_t count);
|
|
// Synchronous input-completion boundary. On failure the encoder is destroyed
|
|
// internally BEFORE returning, so it cannot keep reading the capture buffer.
|
|
// Output is borrowed until the next call or destruction; copy before reusing it.
|
|
// bytes_used must be the actual captured payload. MJPEG needs 64 bytes of
|
|
// readable allocation headroom; never pass sizeimage as the compressed length.
|
|
// fresh_fd=-1 reuses the original import (native HDMI). UVC supplies a new
|
|
// export of this dequeued slot. Keep it open until replacement/free; the old
|
|
// export can be closed AFTER this call, including on failure.
|
|
int rkmpp_dma_encode(RkmppDmaEncoder *encoder, size_t index, size_t bytes_used, int fresh_fd, int64_t pts_us,
|
|
int force_idr, const uint8_t **data, size_t *size);
|
|
int rkmpp_dma_reconfigure(RkmppDmaEncoder *encoder, int kbps, int gop);
|
|
void rkmpp_dma_free(RkmppDmaEncoder *encoder);
|
|
const char *rkmpp_dma_error(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|