关于d3dva11解码H264编码报-1094995529错误的问题

项目中使用了d3dva11硬解码器解码,参数一切正常,在执行

int ret = avcodec_send_packet(decoder_ctx_, avpkt);

这个函数时报错了,错误码:

AVERROR_INVALIDDATA

也就是-1094995529错误。

经过排查源码,发现这个函数在底层执行的时候,会进行颜色空间检测。吧

cpp 复制代码
#if CONFIG_LCMS2
static int detect_colorspace(AVCodecContext *avctx, AVFrame *frame)
{
    AVCodecInternal *avci = avctx->internal;
    enum AVColorTransferCharacteristic trc;
    AVColorPrimariesDesc coeffs;
    enum AVColorPrimaries prim;
    cmsHPROFILE profile;
    AVFrameSideData *sd;
    int ret;
    if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES))
        return 0;

    sd = av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE);
    if (!sd || !sd->size)
        return 0;

    if (!avci->icc.avctx) {
        ret = ff_icc_context_init(&avci->icc, avctx);
        if (ret < 0)
            return ret;
    }

    profile = cmsOpenProfileFromMemTHR(avci->icc.ctx, sd->data, sd->size);
    if (!profile)
        return AVERROR_INVALIDDATA;

    ........
}

也就是cmsOpenProfileFromMemTHR 这个函数报错了,经过Chatgpt,这个函数是预加载颜色空间后,与实际的传入的颜色内存空间进行校对。校对失败就会出现这个问题。

具体为什么为什么会失败?解码器的配置都是正确的,一番操作,发现是H264 profile的问题

H264有多种profile

Base Profile

Main Profile

High Profile

简称为BP,MP,HiP这三种配置,Base Profile是对于一些比较差的设备用来解码的。颜色空间肯定较少且功能少。

问题的根本就在于D3Dva11硬解码器,是不支持BP的,他对H264的颜色空间有一定要求。所以更改了相机的编码配置,就一切正常了。

相关推荐
企业数字化笔记6 小时前
视觉处理为什么会慢?解码、预处理、模型推理、后处理和编码的性能拆解
ffmpeg·gpu算力
Maynor9961 天前
6张商品图→17秒带货短视频:开源12个Claude Skills,配音、字幕花字、BGM本地一条命令出片
ffmpeg·ai编程·claude·电商·agent skills
AIGC小尼1 天前
8G 显存零基础本地部署 AI 漫剧全流程|ComfyUI+Wan2.2+FFmpeg 离线成片完整方案(含代码 / 指令 / 排坑)
人工智能·ffmpeg·php·comfyui·ai漫剧
开开心心就好1 天前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
可乐鸡翅yeah_2 天前
AES‑128 加密 M3U8,IV 初始化向量新手容易踩坑
前端·网络·数据库·ffmpeg·音视频·m3u8在线
企业数字化笔记3 天前
视频视觉任务怎样选择媒体处理技术?FFmpeg、OpenCV、GStreamer 的职责与适用场景
ffmpeg·音视频·媒体
可乐鸡翅yeah_4 天前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8
开开心心就好4 天前
超市定时播音软件,免费版支持循环播放
智能手机·ffmpeg·ocr·word·vim·音视频·visual studio
企业数字化笔记4 天前
视频成片怎么稳定导出?编码选择、GPU/CPU降级与媒体交付验收
java·python·ffmpeg
企业数字化笔记4 天前
视觉智能体怎么选技术?目标检测、跟踪、分割、OpenCV和FFmpeg的职责划分
opencv·目标检测·ffmpeg