diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/vidloop/vidloop.c | 63 |
1 files changed, 39 insertions, 24 deletions
diff --git a/modules/vidloop/vidloop.c b/modules/vidloop/vidloop.c index 6a90318..ec7fb6f 100644 --- a/modules/vidloop/vidloop.c +++ b/modules/vidloop/vidloop.c @@ -280,15 +280,6 @@ static int enable_codec(struct video_loop *vl) } -static void disable_codec(struct video_loop *vl) -{ - vl->enc = mem_deref(vl->enc); - vl->dec = mem_deref(vl->dec); - vl->vc_enc = NULL; - vl->vc_dec = NULL; -} - - static void print_status(struct video_loop *vl) { (void)re_fprintf(stderr, @@ -436,21 +427,34 @@ static int vidloop_start(struct re_printf *pf, void *arg) size.h = cfg->video.height; if (gvl) { - if (gvl->vc_enc) - disable_codec(gvl); - else { - err = enable_codec(gvl); - if (err) { - gvl = mem_deref(gvl); - return err; - } - } + return re_hprintf(pf, "video-loop already running.\n"); + } + + (void)re_hprintf(pf, "Enable video-loop on %s,%s: %u x %u\n", + cfg->video.src_mod, cfg->video.src_dev, + size.w, size.h); - (void)re_hprintf(pf, "%sabled codec: %s\n", - gvl->vc_enc ? "En" : "Dis", - gvl->vc_enc ? gvl->vc_enc->name : ""); + err = video_loop_alloc(&gvl, &size); + if (err) { + warning("vidloop: alloc: %m\n", err); } - else { + + return err; +} + + +static int vidloop_codec_start(struct re_printf *pf, void *arg) +{ + struct vidsz size; + struct config *cfg = conf_config(); + int err = 0; + + (void)arg; + + size.w = cfg->video.width; + size.h = cfg->video.height; + + if (!gvl) { (void)re_hprintf(pf, "Enable video-loop on %s,%s: %u x %u\n", cfg->video.src_mod, cfg->video.src_dev, size.w, size.h); @@ -461,6 +465,16 @@ static int vidloop_start(struct re_printf *pf, void *arg) } } + err = enable_codec(gvl); + if (err) { + gvl = mem_deref(gvl); + return err; + } + + (void)re_hprintf(pf, "%sabled codec: %s\n", + gvl->vc_enc ? "En" : "Dis", + gvl->vc_enc ? gvl->vc_enc->name : ""); + return err; } @@ -477,8 +491,9 @@ static int vidloop_stop(struct re_printf *pf, void *arg) static const struct cmd cmdv[] = { - {"vidloop", 0, 0, "Start video-loop", vidloop_start }, - {"vidloop_stop", 0, 0, "Stop video-loop", vidloop_stop }, + {"vidloop", 0, 0, "Start video-loop", vidloop_start }, + {"vidloop_codec",0, 0, "Start codec video-loop", vidloop_codec_start}, + {"vidloop_stop", 0, 0, "Stop video-loop", vidloop_stop }, }; |