/** @internal @This initializes the output manager for a dejitter pipe. * * @param upipe description structure of the pipe */ static void upipe_dejitter_init_sub_mgr(struct upipe *upipe) { struct upipe_dejitter *upipe_dejitter = upipe_dejitter_from_upipe(upipe); struct upipe_mgr *sub_mgr = &upipe_dejitter->sub_mgr; sub_mgr->refcount = upipe_dejitter_to_urefcount(upipe_dejitter); sub_mgr->signature = UPIPE_DEJITTER_SUB_SIGNATURE; sub_mgr->upipe_alloc = upipe_dejitter_sub_alloc; sub_mgr->upipe_input = upipe_dejitter_sub_input; sub_mgr->upipe_control = upipe_dejitter_sub_control; sub_mgr->upipe_mgr_control = NULL; }
/** @internal @This receives data. * * @param upipe description structure of the pipe * @param uref uref structure * @param upump_p reference to pump that generated the buffer */ static void upipe_dejitter_input(struct upipe *upipe, struct uref *uref, struct upump **upump_p) { uint64_t date; if (ubase_check(uref_clock_get_dts_prog(uref, &date))) { struct upipe_dejitter *upipe_dejitter = upipe_dejitter_from_upipe(upipe); upipe_throw_clock_ref(upipe, uref, date, !upipe_dejitter->inited); upipe_throw_clock_ts(upipe, uref); upipe_dejitter->inited = true; } upipe_dejitter_output(upipe, uref, upump_p); }
/** @internal @This allocates a dejitter pipe. * * @param mgr common management structure * @param uprobe structure used to raise events * @param signature signature of the pipe allocator * @param args optional arguments * @return pointer to upipe or NULL in case of allocation error */ static struct upipe *upipe_dejitter_alloc(struct upipe_mgr *mgr, struct uprobe *uprobe, uint32_t signature, va_list args) { struct upipe *upipe = upipe_dejitter_alloc_void(mgr, uprobe, signature, args); if (unlikely(upipe == NULL)) return NULL; struct upipe_dejitter *upipe_dejitter = upipe_dejitter_from_upipe(upipe); upipe_dejitter_init_urefcount(upipe); upipe_dejitter_init_output(upipe); upipe_dejitter->inited = false; upipe_throw_ready(upipe); return upipe; }