static GstClockReturn _wait (GstClock * clock, GstClockEntry * entry, GstClockTimeDiff * jitter) { GstCpuThrottlingClock *self = GST_CPU_THROTTLING_CLOCK (clock); if (!self->priv->evaluate_wait_time) { if (!(self->priv->sclock)) { GST_ERROR_OBJECT (clock, "Could not find any system clock" " to start the wait time evaluation task"); } else { self->priv->evaluate_wait_time = gst_clock_new_periodic_id (self->priv->sclock, gst_clock_get_time (self->priv->sclock), self->priv->time_between_evals); gst_clock_id_wait_async (self->priv->evaluate_wait_time, (GstClockCallback) gst_transcoder_adjust_wait_time, (gpointer) self, NULL); } } if (G_UNLIKELY (GST_CLOCK_ENTRY_STATUS (entry) == GST_CLOCK_UNSCHEDULED)) return GST_CLOCK_UNSCHEDULED; if (gst_poll_wait (self->priv->timer, self->priv->current_wait_time)) { GST_INFO_OBJECT (self, "Something happened on the poll"); } return GST_CLOCK_ENTRY_STATUS (entry); }
static void process_entry_context_unlocked (GstTestClock * test_clock, GstClockEntryContext * ctx) { GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock); GstClockEntry *entry = ctx->clock_entry; if (ctx->time_diff >= 0) GST_CLOCK_ENTRY_STATUS (entry) = GST_CLOCK_OK; else GST_CLOCK_ENTRY_STATUS (entry) = GST_CLOCK_EARLY; if (entry->func != NULL) { GST_OBJECT_UNLOCK (test_clock); entry->func (GST_CLOCK (test_clock), priv->internal_time, entry, entry->user_data); GST_OBJECT_LOCK (test_clock); } gst_test_clock_remove_entry (test_clock, entry); if (GST_CLOCK_ENTRY_TYPE (entry) == GST_CLOCK_ENTRY_PERIODIC) { GST_CLOCK_ENTRY_TIME (entry) += GST_CLOCK_ENTRY_INTERVAL (entry); if (entry->func != NULL) gst_test_clock_add_entry (test_clock, entry, NULL); } }
static GstClockReturn gst_test_clock_wait_async (GstClock * clock, GstClockEntry * entry) { GstTestClock *test_clock = GST_TEST_CLOCK (clock); GST_OBJECT_LOCK (test_clock); if (GST_CLOCK_ENTRY_STATUS (entry) == GST_CLOCK_UNSCHEDULED) goto was_unscheduled; GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, "requesting asynchronous clock notification at %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_CLOCK_ENTRY_TIME (entry))); gst_test_clock_add_entry (test_clock, entry, NULL); GST_OBJECT_UNLOCK (test_clock); return GST_CLOCK_OK; /* ERRORS */ was_unscheduled: { GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, "entry was unscheduled"); GST_OBJECT_UNLOCK (test_clock); return GST_CLOCK_UNSCHEDULED; } }
static GstClockReturn gst_test_clock_wait (GstClock * clock, GstClockEntry * entry, GstClockTimeDiff * jitter) { GstTestClock *test_clock = GST_TEST_CLOCK (clock); GstTestClockPrivate *priv = GST_TEST_CLOCK_GET_PRIVATE (test_clock); GST_OBJECT_LOCK (test_clock); GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, "requesting synchronous clock notification at %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_CLOCK_ENTRY_TIME (entry))); if (GST_CLOCK_ENTRY_STATUS (entry) == GST_CLOCK_UNSCHEDULED) goto was_unscheduled; if (gst_test_clock_lookup_entry_context (test_clock, entry) == NULL) gst_test_clock_add_entry (test_clock, entry, jitter); GST_CLOCK_ENTRY_STATUS (entry) = GST_CLOCK_BUSY; while (GST_CLOCK_ENTRY_STATUS (entry) == GST_CLOCK_BUSY) g_cond_wait (&priv->entry_processed_cond, GST_OBJECT_GET_LOCK (test_clock)); GST_OBJECT_UNLOCK (test_clock); return GST_CLOCK_ENTRY_STATUS (entry); /* ERRORS */ was_unscheduled: { GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, "entry was unscheduled"); GST_OBJECT_UNLOCK (test_clock); return GST_CLOCK_UNSCHEDULED; } }
static void gst_test_clock_unschedule (GstClock * clock, GstClockEntry * entry) { GstTestClock *test_clock = GST_TEST_CLOCK (clock); GST_OBJECT_LOCK (test_clock); GST_CAT_DEBUG_OBJECT (GST_CAT_TEST_CLOCK, test_clock, "unscheduling requested clock notification at %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_CLOCK_ENTRY_TIME (entry))); GST_CLOCK_ENTRY_STATUS (entry) = GST_CLOCK_UNSCHEDULED; gst_test_clock_remove_entry (test_clock, entry); GST_OBJECT_UNLOCK (test_clock); }
/* Method: status * Returns: the status of the entry (see Gst::ClockEntry::Return). */ static VALUE rg_status (VALUE self) { return GENUM2RVAL(GST_CLOCK_ENTRY_STATUS(RGST_CLOCK_ENTRY (self)), GST_TYPE_CLOCK_RETURN); }