コード例 #1
0
ファイル: timeline.cpp プロジェクト: emdash/QT-GES-Demo
void Timeline::
remove(int index)
{
  GESTimelineObject * obj;
  if (!(obj = ges_simple_timeline_layer_nth(layer, index)))
    return;
   
  beginRemoveRows(QModelIndex(), index, index);
  ges_timeline_layer_remove_object(GES_TIMELINE_LAYER(layer), obj);
}
コード例 #2
0
static void
ges_timeline_layer_dispose (GObject * object)
{
  GESTimelineLayer *layer = GES_TIMELINE_LAYER (object);
  GESTimelineLayerPrivate *priv = layer->priv;

  GST_DEBUG ("Disposing layer");

  while (priv->clips_start)
    ges_timeline_layer_remove_clip (layer, (GESClip *) priv->clips_start->data);

  G_OBJECT_CLASS (ges_timeline_layer_parent_class)->dispose (object);
}
コード例 #3
0
/* GObject standard vmethods */
static void
ges_timeline_layer_get_property (GObject * object, guint property_id,
    GValue * value, GParamSpec * pspec)
{
  GESTimelineLayer *layer = GES_TIMELINE_LAYER (object);

  switch (property_id) {
    case PROP_PRIORITY:
      g_value_set_uint (value, layer->priv->priority);
      break;
    case PROP_AUTO_TRANSITION:
      g_value_set_boolean (value, layer->priv->auto_transition);
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
  }
}
コード例 #4
0
GESTimelinePipeline *
make_timeline (char *path, float duration, char *text, guint32 color,
    gdouble xpos, gdouble ypos)
{
  GESTimeline *timeline;
  GESTrack *trackv, *tracka;
  GESTimelineLayer *layer1;
  GESTimelineObject *srca;
  GESTimelineObject *overlay;
  GESTimelinePipeline *pipeline;
  guint64 aduration;

  pipeline = ges_timeline_pipeline_new ();

  ges_timeline_pipeline_set_mode (pipeline, TIMELINE_MODE_PREVIEW_VIDEO);

  timeline = ges_timeline_new ();
  ges_timeline_pipeline_add_timeline (pipeline, timeline);

  trackv = ges_track_video_raw_new ();
  ges_timeline_add_track (timeline, trackv);

  tracka = ges_track_audio_raw_new ();
  ges_timeline_add_track (timeline, tracka);

  layer1 = GES_TIMELINE_LAYER (ges_timeline_layer_new ());
  g_object_set (layer1, "priority", (gint32) 0, NULL);

  if (!ges_timeline_add_layer (timeline, layer1))
    exit (-1);

  aduration = (guint64) (duration * GST_SECOND);
  srca = make_source (path, 0, aduration, 1);
  overlay = make_overlay (text, 0, aduration, 0, color, xpos, ypos);
  ges_timeline_layer_add_object (layer1, srca);
  ges_timeline_layer_add_object (layer1, overlay);

  return pipeline;
}
コード例 #5
0
ファイル: timeline.cpp プロジェクト: emdash/QT-GES-Demo
Timeline::
Timeline(QObject *parent) : QAbstractListModel(parent)
{
  timeline = ges_timeline_new_audio_video();
  layer = ges_simple_timeline_layer_new();
  ges_timeline_add_layer(timeline, GES_TIMELINE_LAYER(layer));

  g_signal_connect(G_OBJECT(layer), "object-added",
    G_CALLBACK(layer_object_added_cb), this);
  g_signal_connect(G_OBJECT(layer), "object-moved",
    G_CALLBACK(layer_object_moved_cb), this);
  g_signal_connect(G_OBJECT(layer), "object-removed",
    G_CALLBACK(layer_object_removed_cb), this);

  QHash <int, QByteArray> rolenames;
  rolenames[thumb_uri_role] = "thumb_uri";
  rolenames[media_uri_role] = "media_uri";
  rolenames[inpoint_role] = "in_point";
  rolenames[outpoint_role] = "out_point";
  rolenames[duration_role] = "duration";
  rolenames[duration_only_role] = "duration_only";
  setRoleNames(rolenames);
  row_count = 0;
}
コード例 #6
0
static void
gstl_recalculate (GESSimpleTimelineLayer * self)
{
  GList *tmp;
  gint64 pos = 0;
  gint priority = 0;
  gint transition_priority = 0;
  gint height;
  GESTimelineObject *prev_object = NULL;
  GESTimelineObject *prev_transition = NULL;
  gboolean valid = TRUE;
  GESSimpleTimelineLayerPrivate *priv = self->priv;

  priority = GES_TIMELINE_LAYER (self)->min_gnl_priority + 2;

  GST_DEBUG ("recalculating values");

  if (priv->objects && GES_IS_TIMELINE_TRANSITION (priv->objects->data)) {
    valid = FALSE;
  }

  for (tmp = priv->objects; tmp; tmp = tmp->next) {
    GESTimelineObject *obj;
    guint64 dur;
    GList *l_next;

    obj = (GESTimelineObject *) tmp->data;
    dur = GES_TIMELINE_OBJECT_DURATION (obj);
    height = GES_TIMELINE_OBJECT_HEIGHT (obj);

    if (GES_IS_TIMELINE_SOURCE (obj)) {

      GST_LOG ("%p obj: height: %d: priority %d", obj, height, priority);

      if (G_UNLIKELY (GES_TIMELINE_OBJECT_START (obj) != pos)) {
        ges_timeline_object_set_start (obj, pos);
      }

      if (G_UNLIKELY (GES_TIMELINE_OBJECT_PRIORITY (obj) != priority)) {
        ges_timeline_object_set_priority (obj, priority);
      }

      transition_priority = MAX (0, priority - 1);
      priority += height;
      pos += dur;

      g_assert (priority != -1);

    } else if (GES_IS_TIMELINE_TRANSITION (obj)) {

      pos -= dur;
      if (pos < 0)
        pos = 0;

      GST_LOG ("%p obj: height: %d: trans_priority %d Position: %"
          G_GINT64_FORMAT ", duration %" G_GINT64_FORMAT, obj, height,
          transition_priority, pos, dur);

      g_assert (transition_priority != -1);

      if (G_UNLIKELY (GES_TIMELINE_OBJECT_START (obj) != pos))
        ges_timeline_object_set_start (obj, pos);

      if (G_UNLIKELY (GES_TIMELINE_OBJECT_PRIORITY (obj) !=
              transition_priority)) {
        ges_timeline_object_set_priority (obj, transition_priority);
      }

      /* sanity checks */
      l_next = g_list_next (tmp);

      if (GES_IS_TIMELINE_TRANSITION (prev_object)) {
        GST_ERROR ("two transitions in sequence!");
        valid = FALSE;
      }

      if (prev_object && (GES_TIMELINE_OBJECT_DURATION (prev_object) < dur)) {
        GST_ERROR ("transition duration exceeds that of previous neighbor!");
        valid = FALSE;
      }

      if (l_next && (GES_TIMELINE_OBJECT_DURATION (l_next->data) < dur)) {
        GST_ERROR ("transition duration exceeds that of next neighbor!");
        valid = FALSE;
      }

      if (prev_transition) {
        guint64 start, end;
        end = (GES_TIMELINE_OBJECT_DURATION (prev_transition) +
            GES_TIMELINE_OBJECT_START (prev_transition));

        start = pos;

        if (end > start) {
          GST_ERROR ("%" G_GUINT64_FORMAT ", %" G_GUINT64_FORMAT ": "
              "overlapping transitions!", start, end);
          valid = FALSE;
        }
      }
      prev_transition = obj;
    }

    prev_object = obj;

  }

  if (prev_object && GES_IS_TIMELINE_TRANSITION (prev_object)) {
    valid = FALSE;
  }

  GST_DEBUG ("Finished recalculating: final start pos is: %" GST_TIME_FORMAT,
      GST_TIME_ARGS (pos));

  GES_TIMELINE_LAYER (self)->max_gnl_priority = priority;

  if (valid != self->priv->valid) {
    self->priv->valid = valid;
    g_object_notify (G_OBJECT (self), "valid");
  }
}