summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristophe Massiot <cmassiot@openheadend.tv>2014-01-30 23:04:55 +0100
committerChristophe Massiot <cmassiot@openheadend.tv>2014-01-30 23:04:55 +0100
commit590e4bac4abed785b661824da41504576218faa8 (patch)
treee26ab50550dc685d61bf1bb14670744cf8d30f62
parenteb7a209b0bad740ba749508a89a29a723d80ba89 (diff)
code simplicationv0.2
-rw-r--r--doc/rules.mkdoc2
-rw-r--r--examples/glxplay.c15
2 files changed, 8 insertions, 9 deletions
diff --git a/doc/rules.mkdoc b/doc/rules.mkdoc
index 50855dd..c03b967 100644
--- a/doc/rules.mkdoc
+++ b/doc/rules.mkdoc
@@ -33,6 +33,8 @@
@item A pipe may send an empty uref (pointing to a NULL ubuf) to indicate minor flow definition changes (such as change of language). However it may not be the first packet output by the pipe. Reversely, a pipe is not required to deal with an empty uref if it is the first packet it receives.
+ @item A pipe shall not throw a @ref UPROBE_NEED_UPUMP_MGR event before receiving its first buffer. An exception is allowed for source pipes, but it is legal for the application to not give a upump_mgr right away, and the source pipe should not throw a fatal error if that happens.
+
@end list
@end section
diff --git a/examples/glxplay.c b/examples/glxplay.c
index e9aae91..321c795 100644
--- a/examples/glxplay.c
+++ b/examples/glxplay.c
@@ -152,7 +152,6 @@ struct upipe_glxplayer {
bool upipe_ts;
/* managers */
- struct uclock *uclock;
struct upipe_mgr *upipe_filter_blend_mgr;
struct upipe_mgr *upipe_sws_mgr;
struct upipe_mgr *upipe_qsink_mgr;
@@ -616,10 +615,6 @@ struct upipe_glxplayer *upipe_glxplayer_alloc(enum uprobe_log_level loglevel)
glxplayer->upipe_ts = false;
glxplayer->paused = false;
- glxplayer->uclock = uclock_std_alloc(0);
- if (unlikely(glxplayer->uclock == NULL))
- goto fail_uclock;
-
struct umem_mgr *umem_mgr = umem_pool_mgr_alloc_simple(UMEM_POOL);
if (unlikely(umem_mgr == NULL))
goto fail_umem_mgr;
@@ -634,6 +629,10 @@ struct upipe_glxplayer *upipe_glxplayer_alloc(enum uprobe_log_level loglevel)
if (unlikely(uref_mgr == NULL))
goto fail_uref_mgr;
+ struct uclock *uclock = uclock_std_alloc(0);
+ if (unlikely(uclock == NULL))
+ goto fail_probe_logger;
+
/* probes common to all threads */
glxplayer->uprobe_logger =
uprobe_pthread_upump_mgr_alloc(
@@ -641,8 +640,9 @@ struct upipe_glxplayer *upipe_glxplayer_alloc(enum uprobe_log_level loglevel)
uprobe_uclock_alloc(
uprobe_uref_mgr_alloc(
uprobe_stdio_alloc(NULL, stderr, glxplayer->loglevel),
- uref_mgr), glxplayer->uclock),
+ uref_mgr), uclock),
umem_mgr, UBUF_POOL_DEPTH, UBUF_POOL_DEPTH));
+ uclock_release(uclock);
if (unlikely(glxplayer->uprobe_logger == NULL))
goto fail_probe_logger;
@@ -755,8 +755,6 @@ fail_uref_mgr:
fail_udict_mgr:
umem_mgr_release(umem_mgr);
fail_umem_mgr:
- uclock_release(glxplayer->uclock);
-fail_uclock:
free(glxplayer);
return NULL;
}
@@ -953,7 +951,6 @@ void upipe_glxplayer_free(struct upipe_glxplayer *glxplayer)
upipe_mgr_release(glxplayer->upipe_null_mgr);
upipe_av_clean();
uprobe_release(glxplayer->uprobe_logger);
- uclock_release(glxplayer->uclock);
free(glxplayer);
}