Gstreamer学习3----灌数据给管线之appsrc

参考资料

Basic tutorial 8: Short-cutting the pipeline

gstreamer向appsrc发送帧画面的代码_gst appsrc可变帧率-CSDN博客

在官网教程Basic tutorial 8: Short-cutting the pipeline

里面,讲了一个例子,push音频数据给管线,视频的例子更加直观一些,

主要步骤:

注册一个回调,

 g_signal_connect(appsrc, "need-data", G_CALLBACK(cb_need_data), NULL);

回调方法中,设置数据,再push进处理流程中

 g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);

这个g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);是个同步阻塞方法,因为ret作为入参,记录执行的情况。

#include <gst/gst.h>
#define VIDEO_WIDTH   384
#define VIDEO_HEIGHT  288
#define VIDEO_FORMAT  "RGB16"
#define PIXEL_SIZE    2

static void cb_need_data(GstElement* appsrc, guint unused_size, gpointer user_data)
{
  static gboolean white = FALSE;
  static GstClockTime timestamp = 0;
  GstBuffer* buffer;
  guint size;
  GstFlowReturn ret;
  g_print("cb_need_data called\n");
  static unsigned char color = 0;

  size = VIDEO_WIDTH * VIDEO_HEIGHT * PIXEL_SIZE;
  buffer = gst_buffer_new_allocate(NULL, size, NULL);
  /* this makes the image black/white */
 // gst_buffer_memset(buffer, 0, white ? 0xFF : 0x00, size);
  gst_buffer_memset(buffer, 0, color, size);
  color += 10;

 // white = !white;
  GST_BUFFER_PTS(buffer) = timestamp;
  GST_BUFFER_DURATION(buffer) = gst_util_uint64_scale_int(1, GST_SECOND, 2);
  timestamp += GST_BUFFER_DURATION(buffer);
  g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);
  gst_buffer_unref(buffer);
  if (ret != GST_FLOW_OK)
  {
    /* something wrong, stop pushing */
  //  g_main_loop_quit(loop);
  }
}

gint main(gint argc, gchar* argv[])
{
  GstElement* pipeline, * appsrc, * conv, * videosink;
  GMainLoop* loop;
  /* init GStreamer */
  gst_init(NULL, NULL);
  loop = g_main_loop_new(NULL, FALSE);
  /* setup pipeline */
  pipeline = gst_pipeline_new("pipeline");
  appsrc = gst_element_factory_make("appsrc", "source");
  conv = gst_element_factory_make("videoconvert", "conv");
  videosink = gst_element_factory_make("autovideosink", "videosink");
  /* setup */
  g_object_set(G_OBJECT(appsrc), "caps",
    gst_caps_new_simple("video/x-raw",
      "format", G_TYPE_STRING, VIDEO_FORMAT,
      "width", G_TYPE_INT, VIDEO_WIDTH,
      "height", G_TYPE_INT, VIDEO_HEIGHT,
      "framerate", GST_TYPE_FRACTION, 0, 1,
      NULL), NULL);
  gst_bin_add_many(GST_BIN(pipeline), appsrc, conv, videosink, NULL);
  gst_element_link_many(appsrc, conv, videosink, NULL);
  /* setup appsrc */
  g_object_set(G_OBJECT(appsrc),
    "stream-type", 0,
    "format", GST_FORMAT_TIME, NULL);
  g_signal_connect(appsrc, "need-data", G_CALLBACK(cb_need_data), NULL);
  /* play */
  gst_element_set_state(pipeline, GST_STATE_PLAYING);
  g_main_loop_run(loop);
  /* clean up */
  gst_element_set_state(pipeline, GST_STATE_NULL);
  gst_object_unref(GST_OBJECT(pipeline));
  g_main_loop_unref(loop);
  return 0;
}

可以看到颜色变化的画面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/714600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DP读书:《半导体物理学(第八版)》(四)半导体的导电性-玻尔兹曼-电导率

第四章 半导体的导电性 4.1 载流子的漂移运动和迁移率4.1.1欧姆定律4.2.2漂移速度和迁移4.1.3半导体的电导率和迁移率 4.2 载流子的散射4.2.1载流子散射的概念4.2.2半导体主要散射机构 4.3迁移率与杂质浓度和温度的关系4.3.1平均自由时间混合和散射概率的关系4.3.2电导率、迁移…

[C++]使用yolov10的onnx模型结合onnxruntime和bytetrack实现目标追踪

【官方框架地址】 yolov10yolov10框架&#xff1a;https://github.com/THU-MIG/yolov10 bytetrack框架&#xff1a;https://github.com/ifzhang/ByteTrack 【算法介绍】 Yolov10与ByTetrack&#xff1a;目标追踪的强大组合 Yolov10和ByTetrack是两种在目标追踪领域具有显…

算法体系-21 第二十一 暴力递归到动态规划(三)

一 最长回文子串 1.1 描述 给定一个字符串str&#xff0c;返回这个字符串的最长回文子序列长度 比如 &#xff1a; str “a12b3c43def2ghi1kpm” 最长回文子序列是“1234321”或者“123c321”&#xff0c;返回长度7 1.2 分析 1.2.1 先将原传逆序&#xff0c;求原串和反转后的…

代理IP协议有何区别?深入了解 SOCKS5、HTTP 代理

在数字通信领域&#xff0c;数据安全和匿名性都是非常重要的指标。互联网的不断发展催生了几种协议&#xff0c;每种协议都有独特的优势和挑战。其中&#xff0c;SOCKS5 代理、HTTP代理最为广泛使用&#xff0c;下面给大家一起讨论&#xff0c;HTTP代理与 SOCKS5代理&#xff0…

基于微信小程序的在线答题小程序设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

MySQL基础——SQL语句

目录 1.SQL通用语法 2.SQL分类 3 DDL 3.1数据库操作 3.1.1查询 3.1.2创建 3.1.3删除 3.1.4使用 3.2表操作 3.2.1查询 3.2.2创建 3.2.3数据类型 3.2.4表修改&#xff08;alter打头&#xff09; 3.2.5表删除&#xff08;drop/truncate打头&#xff09; 3.3 DDL总结…

C#联合Halcon机器视觉框架源码—升级版

相较于之前的NxtVision&#xff0c;本软件代码架构更加合理&#xff0c;且新增ui设计器、原来的vb脚本改为C#脚本&#xff0c;并尝试将视觉与运动控制相结合&#xff0c;是一体化的框架。 对源码有需求的&#xff0c;订阅本专栏后&#xff0c;私信我领取。

用python纯手写一个日历

一、代码 # 月份名称数组 months ["January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", &qu…

JVM如何确定方法调用

方法调用并不等同于方法执行&#xff0c;方法调用阶段唯一的任务就是确定调用哪一个方法&#xff0c;不涉及方法内部的具体运行过程。在程序运行时&#xff0c;进行方法调用是最普遍、最频繁的操作&#xff0c;但Class文件的编译过程中不包含传统编译中的连接步骤&#xff0c;一…

Python | 中心极限定理介绍及实现

统计学是数据科学项目的重要组成部分。每当我们想从数据集的样本中对数据集的总体进行任何推断&#xff0c;从数据集中收集信息&#xff0c;或者对数据集的参数进行任何假设时&#xff0c;我们都会使用统计工具。 中心极限定理 定义&#xff1a;中心极限定理&#xff0c;通俗…

英语学习笔记36——Where ... ?

Where … ? ……在哪里&#xff1f; 词汇 Vocabulary beside prep. 在……旁边 同义词&#xff1a; near by 构成&#xff1a;be side side n. 边 搭配&#xff1a;side walk 人行道 例句&#xff1a;Bobby在我旁边。    Bobby is beside me. off prep. 离开&#xff…

【数据库编程-SQLite3(一)】sqlite3数据库在Windows下的配置及测试

学习分析 1、资源准备2、环境配置2.1、将资源包下载解压缩保存。2.2、在QT中创建工程,配置环境 3、测试配置3.1、 sqlite3_open函数3.2、sqlite3_close函数3.3、代码测试 1、资源准备 资源包 2、环境配置 2.1、将资源包下载解压缩保存。 解压缩得到以下文件 2.2、在QT中创建…

30 天 52% 回报:GPT-4o 量化交易机器人

本文介绍了如何利用GPT-4o&#xff0c;结合量化交易技术创建盈利的交易机器人策略&#xff0c;并通过回溯测试验证这一策略的有效性。原文: 52% Returns in 30 Days: Your GPT-4o Quant Trading Bot Strategy 量化交易可以盈利&#xff0c;但只有拥有丰富资源、拥有编码和数学技…

解决 Vue-Element-admin 后台请求Uncaught (in promise) Object

文章目录 问题描述原因分析解决方案 问题描述 前端Vue-Element-admin与SpringBoot后端对接login接口后&#xff0c;后端login接口正常响应&#xff0c;但在前台无法登入系统&#xff0c;浏览器控制台报了 Uncaught (in promise) Object 错误。 报错详情如下所示&#xff1a;…

不一样的SYSTEM APP(SYSTEM flag和system_prop区别)

1.问题引入 在Android开发中, 1)Framework中PackageManager扫包后,会把app归类为SYSTEM, SYSTEM_EXT, PRIVILEGED 类别. 2)同样的, SeAndroid也会把APP归类程platform_app, system_app, untrusted_app(甚至还有其他,mediaprovider,gmscore_app). flag SYSTEM和system_app我们…

Linux中的yum和vim

Linux软件包管理 一.什么是软件包二.如何查看软件包二.如何安装软件三.vim编辑器3.1在vim编辑器中有三种模式&#xff0c;即命令模式插入模式低行模式 3.2vim的基本操作3.3vim末行模式命令集 一.什么是软件包 有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上…

Android 自定义View

我们所有的试图都是起源于自定义View&#xff0c;包括ViewGroup也是继承于它&#xff0c;可以说它是视图组件之父。 我们可以从它的大致流程来分为四个部分&#xff1a; 构造方法&#xff0c;onMeasure&#xff0c;onLayout&#xff0c;onDraw 构造方法&#xff1a; 它主要有…

14 学习PID--步进电机梯形加减速实现原理

步进电机加减速使用的场景有那些呢&#xff1f;为什么要使用加减速呢&#xff1f; 硬件驱动细分器与软件的细分参数或定时器分频参数设置不当时启动电机时&#xff0c;会遇见步进电机有啸叫声但是不会转动&#xff0c;这是因为软件产生脉冲的频率大于步进电机的启动频率&#x…

大数据入门实践一:mac安装Hadoop,Hbase,FLume

一、安装Hadoop 安装hadoop参考此文&#xff0c;关键点是安装JDK和Hadoop的配置&#xff0c;为避免引用文章变收费&#xff0c;我把关键信息摘录如下&#xff1a; jdk安装和配置就不说了(我本机安装了1.8/15/17/21&#xff0c;以17为主&#xff09;&#xff0c;hadoop安装过程…

2024/6/16周报

文章目录 摘要Abstract文献阅读题目问题本文贡献方法aGNN输入和输出模块嵌入模块编码器和解码器模块&#xff1a;支持多头注意的GCN多头自注意力机制GCN模型解释&#xff1a;SHAP 案例研究地下水流动与污染物运移模型研究场景设计 数据集实验结果 代码复现结论 摘要 本周阅读了…