gstreamer的插件如何复制数据

简介: gstreamer的插件如何复制数据

工作中,使用了gstreamer和nvidia的DeepStream插件。如何从nvidia插件中获取数据,这个之前吾有博文专门论述。因为这个很少介绍,也不好找。吾当时也是运气好,从别的代码中得到启示,才找到了正确的解决办法。


那么,普通的gstreamer插件如何获取数据呢?比如说,从decoder(包括nvidia decoder插件)中,获取原始的h264数据代码是怎样的?这个很简单,这里分享出来,这样可以在本博客中都能找到,更方便。


当然,这里的结构体的意思,一看就明白,自行更改即可。


/

static int get_probe_h264_data(const GstPadProbeInfo * pProbeInfo, DataBuffer* pBuffer)
{
    GstBuffer *gst_buf = (GstBuffer *) pProbeInfo->data;
    GstMapInfo map_info;
    int size = 0;
    if (gst_buf == NULL || !gst_buffer_map (gst_buf, &map_info, GST_MAP_READ))
    {
        g_print ("gst_buffer_map() error!");
        return -1;
    }
    size        = gst_buffer_get_size( gst_buf );
    databuffer_check(pBuffer, size);
    gst_buffer_extract (gst_buf, 0, pBuffer->data, size);
    pBuffer->size = size;
    gst_buffer_unmap (gst_buf, &map_info);
    return 0;
}
/**
 获取H264数据,并保存。
 */
static GstPadProbeReturn callback_osd_sink_pad_buffer_probe_decoder (GstPad * pad, GstPadProbeInfo * probe_info, gpointer u_data)
{
    AiTask *pAiTask = (AiTask *)u_data;
    get_probe_h264_data(probe_info, &(pAiTask->h264_buffer));
    /*GH_LOG_INFO("size=%d, data=[0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X,]",
            pAiTask->h264_buffer.size,
            pAiTask->h264_buffer.data[0],
            pAiTask->h264_buffer.data[1],
            pAiTask->h264_buffer.data[2],
            pAiTask->h264_buffer.data[3],
            pAiTask->h264_buffer.data[4]
            );
    */
    fwrite(pAiTask->h264_buffer.data, 1, pAiTask->h264_buffer.size, pAiTask->h264_file);
    return GST_PAD_PROBE_OK;
}
int main()
{
    video_decoder = gst_element_factory_make("nvdec_h264", element_name);
    osd_pad = gst_element_get_static_pad(video_decoder, TEXT_SINK);
    if (osd_pad)
    {
        osd_probe_id = gst_pad_add_probe(osd_pad, GST_PAD_PROBE_TYPE_BUFFER,
                                callback_osd_sink_pad_buffer_probe_decoder, pTask, NULL);
    }
}
目录
相关文章
|
容器
Inno Setup GIF 显示插件 GIFCtrl (V2.1 版本)
原文 http://restools.hanzify.org/article.asp?id=79  引用来自 test.iss ; -- test.iss --; restools; http://restools.hanzify.org; gifctrl.dll 为一个用于 Inno Setup 的 13 KB 的 gif 显示插件,同样可以显示 BMP 和 JPEG。
1493 0
|
2月前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
QT多插件通信框架CTK编译记录
|
3月前
|
资源调度 前端开发 JavaScript
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
|
4月前
|
内存技术
文本,wangEditor下载失败,nvm降级到17.0.0,可能是,如果之前下载了4现在pack.json删除,再重新下
文本,wangEditor下载失败,nvm降级到17.0.0,可能是,如果之前下载了4现在pack.json删除,再重新下
|
4月前
|
JavaScript 数据安全/隐私保护
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
183 0
|
5月前
|
存储 缓存 开发工具
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
1484 0
|
图形学
Unity热更新——AB包的基本操作
Unity热更新——AB包的基本操作
525 1
|
Linux Shell
pkg-config 自动补全 C 编译库依赖
pkg-config 是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。
130 0
|
Java Linux Go
知识分享之Golang——在Goland中增加保存格式化插件
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
475 0
知识分享之Golang——在Goland中增加保存格式化插件
gstreamer 1.8.3 编译记录
gstreamer 1.8.3 编译记录
111 0
下一篇
无影云桌面