[mjpeg_qsv] get_buffer() failed qsv解码后用滤镜问题

news/2024/7/10 21:18:28 标签: ffmpeg, qsv, 滤镜, get_buffer

[mjpeg_qsv] get_buffer() failed

qsv解码后,使用滤镜经常会遇到这个问题。报这个错误是因为GPU的显存数据无法直接使用。
如下:
请添加图片描述

访问qsv解码后存入GPU的数据有两种方式。
1.把显存的数据copy到系统内存

re = av_hwframe_transfer_data(sw_pframe, praw_frame, 0);

这个接口的问题是,从GPU->CPU的数据拷贝,过于消耗cpu,也费时,远大于系统内存之间的拷贝,可能因为显卡是外设的原因吧。因此有了下面这一种不拷贝的方式。

2.将显存中的数据映射成可以访问的数据。
(此时数据依然还在显存中,只是我们拥有了访问的能力。若未经映射,即使有地址如praw_frame->data,一读写就报错),笔者环境为intel N6000,4核4线程,切换为这种方式后,id节省了10%。
但用它也经常会带来一些问题。

re = av_hwframe_map(sw_pframe, praw_frame, 0);

就比如标题中的报错问题
我们用滤镜如下,用2.映射地址的方式,将sw_pframe传入滤镜
若此时不进行其中的像素格式转换,就会报标题的错误。

av_bprintf(&args,
"buffer=video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d:frame_rate=%d/%d[main];"
"buffer=video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d:frame_rate=%d/%d[logo];"
"[main][logo]overlay=x=10:y=10[result];"
"[result]format=yuv420p[result_2];"
"[result_2]buffersink",
frame->width, frame->height, frame->format, tb.num, tb.den, sar.num, sar.den, fr.num, fr.den,
logo_frame->width, logo_frame->height, logo_frame->format, logo_tb.num, logo_tb.den,
logo_sar.num, logo_sar.den, logo_fr.num, logo_fr.den);

然后add输入,get数据。注意result_frame->data的内存是接口分配的。因此从sw_pframe到result_frame其实是一次深拷贝。并且从显存copy到系统内存了。而av_buffersink_get_frame_flags并不具备这个能力,因此才会报上述错误。
加上像素格式转换就正常了呢,因此可以看出滤镜的像素格式转换拥有av_hwframe_transfer_data的能力。
发现进行nv12的像素格式转换,依然报上述错误。因为数据inter硬件解码后就是nv12,不会进行这步。因此也没有完成av_hwframe_transfer_data过程。

AVFrame *result_frame = av_frame_alloc();
....//伪代码
ret = av_buffersrc_add_frame_flags(mainsrc_ctx, sw_pframe,AV_BUFFERSRC_FLAG_PUSH);

ret = av_buffersink_get_frame_flags(resultsink_ctx, result_frame,AV_BUFFERSINK_FLAG_NO_REQUEST);

<a class=ffmpeg是音视频必备,但即使从业数年,它似乎依然有无穷的秘密,感兴趣添加笔者微信:YQW1163720468,加入ffmpeg微信群讨论。但记得备注:ffmpeg爱好者" />


http://www.niftyadmin.cn/n/5006783.html

相关文章

shell第二次作业

1.编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如: test1、test2、test3、.....、 test10 #!/bin/bash read -p "请输入用户账户名前缀: " prefix read -p "请输入中户的…

android上架备案公钥和md5获取工具

最近很多公司上架遇到了一个问题&#xff0c;就是要提供app的备案证明&#xff0c;现在android上架都需要备案了&#xff0c;但是我们的证书都是通过工具生成的&#xff0c;哪里知道公钥和md5那些东西呢&#xff1f;无论安卓备案还是ios备案都需要提供公钥和md5。 包括ios的备案…

Golang综合项目实战(一)

Golang综合项目实战&#xff08;一&#xff09; 01-项目简介02-项目架构、术语、运行结果03-创建并初始化项目04-创建用户模型和错误处理05-创建密码加密工具类06-保存密码之前的hooks07-创建用户名密码验证工具类08-用户数据库操作逻辑09-操作用户service10-创建商品分类模型…

【ARM CoreLink 系列 3 -- CCI-550 控制器介绍 】

文章目录 CCI FamilyCCI-550 简介CCI-550 功能CCI-550 Interfaces Snoop filter 使用背景CCI-550 Snoop filter 上篇文章&#xff1a;ARM CoreLink 系列 2 – CCI-400 控制器简介 CCI Family CCI-550 简介 Arm CoreLink CCI-550 Cache Coherent Interconnect 扩展了 CoreLink…

链接服务器导致SQL Server停止响应

概要 如果多个实例中同时存在数据源为对方实例的链接服务器&#xff0c;并且开启了“分发服务器”的属性&#xff0c;您可能会遇到这种情况。 现象 14:31时&#xff0c;在SSMS中检查HIS实例是否有复制订阅时&#xff0c;点击了”发布服务器属性“后&#xff0c;SSMS一直无法响…

日常开发小点汇总(2)之防止网络不佳,获取不到css,页面logo做法

防止网络不佳&#xff0c;获取不到css&#xff0c;页面logo做法 <div><a href"//www.baidu.com" class"logo">百度</a></div>.logo {display: inline-block;width: 256px;height: 0;background: url(./logobai.png);background-r…

9月5日上课内容 第一章 NoSQL之Redis配置与优化

本章结构 关系型数据库和非关系型数据库 概念介绍 ●关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是…

【知识图谱】入门:通俗理解 什么是知识图谱 | 知识图谱就是NLP吗?只适用于自然语言处理?那你就out了!| 知识图谱能帮助我们完成什么任务?

把时间分给睡眠,分给书籍,分给运动,分给花鸟树木和山川湖海,分给你对这个世界的热爱,而不是将自己浪费在无聊的人和事上。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 �…