GstSegment介绍

这里介绍一下GstSegment结构
GstSegment: (https://gstreamer.freedesktop.org/documentation/gstreamer/gstsegment.html?gi-language=c)
这个structure保存一些追踪感兴趣的区域的相关value, 主要用于两个目的,一个seek(handle seek events), 一个是tracking playback regions(handle newsegment events).
segment一般由app来生成,然后以event的方式传递给upstream,由具体实施seek的element来handle这个event. 然后作为一个newsegment的event传递给downstream, 用来定义这个segment的边界。
这个structure用gst_segment_init来初始化,用GstFormat来定义format. 内部成员start默认值为0, stop/duration默认为-1. rate and applied_rate默认为1.0
当element要做seek时, 需要使用gst_segment_do_seek函数来将要seek的value填到本element的GstSegment结构体中。在调用上述函数之前,需要检测format是否一样,不一样的话,需要转换format.
当element使用GstSegment去track playback region, 可以使用gst_segment_clip来实现。

下面我们看一下成员变量:

struct _GstSegment {
  /*< public >*/
  GstSegmentFlags flags;

  gdouble         rate;
  gdouble         applied_rate;

  GstFormat       format;
  guint64         base;
  guint64         offset;
  guint64         start;
  guint64         stop;
  guint64         time;

  guint64         position;
  guint64         duration;

  /* < private > */
  gpointer        _gst_reserved[GST_PADDING];
};

成员函数:

GType        gst_segment_get_type            (void);
/*创建并init一个segment.*/
GstSegment * gst_segment_new                 (void) ;
/*copy传入的segment, 返回一个新建的segment, 使用完毕后需要用gst_segment_free()来释放*/
GstSegment * gst_segment_copy                (const GstSegment *segment) ;
/*这个就是直接调用memcpy将src复制到dest中*/
void         gst_segment_copy_into           (const GstSegment *src, GstSegment *dest);
void         gst_segment_free                (GstSegment *segment);
/*利用format来初始化segment, 其他值采用默认值, 利用传入的format来初始化format*/
void         gst_segment_init                (GstSegment *segment, GstFormat format);
/*就是将segment里面的信息和position计算出srteam_time, 主要就是stream_time = position - start, 返回值返回成功or失败*/
gint         gst_segment_to_stream_time_full (const GstSegment *segment, GstFormat format, guint64 position, guint64 * stream_time);
/*功能和上面函数一样,只不过将stream_time作为返回值返回*/
guint64      gst_segment_to_stream_time      (const GstSegment *segment, GstFormat format, guint64 position);
/*通过stream_time来计算position*/
gint         gst_segment_position_from_stream_time_full (const GstSegment * segment, GstFormat format, guint64 stream_time, guint64 * position);
/*同上*/
guint64      gst_segment_position_from_stream_time (const GstSegment * segment, GstFormat format, guint64 stream_time);
/*将position转换为running time*/
guint64      gst_segment_to_running_time     (const GstSegment *segment, GstFormat format, guint64 position);
/*同上*/
gint         gst_segment_to_running_time_full (const GstSegment *segment, GstFormat format, guint64 position,
                                               guint64 * running_time);
GST_DEPRECATED_FOR(gst_segment_position_from_running_time)
guint64      gst_segment_to_position         (const GstSegment *segment, GstFormat format, guint64 running_time);

gint         gst_segment_position_from_running_time_full (const GstSegment *segment, GstFormat format, guint64 running_time, guint64 * position);
guint64      gst_segment_position_from_running_time (const GstSegment *segment, GstFormat format, guint64 running_time);
gboolean     gst_segment_set_running_time    (GstSegment *segment, GstFormat format, guint64 running_time);
gboolean     gst_segment_offset_running_time (GstSegment *segment, GstFormat format, gint64 offset);
gboolean     gst_segment_clip                (const GstSegment *segment, GstFormat format, guint64 start,
                                              guint64 stop, guint64 *clip_start, guint64 *clip_stop);
 /*用传入的各个参数来初始化传入的segment, 初始化的时候会根据flag和format等参数来做一些调整,主要就是
 给segment内部的成员变量赋值*/
gboolean     gst_segment_do_seek             (GstSegment * segment, gdouble rate,
                                              GstFormat format, GstSeekFlags flags,
                                              GstSeekType start_type, guint64 start,
                                              GstSeekType stop_type, guint64 stop, gboolean * update);
gboolean     gst_segment_is_equal            (const GstSegment * s0, const GstSegment * s1);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值