9e2a2300d0
- Added upstream feature patch for GTK+ call history
447 lines
9.9 KiB
Diff
447 lines
9.9 KiB
Diff
From 01804dcfaf77e298a3f7bdc3d4cfe0882bf681cd Mon Sep 17 00:00:00 2001
|
|
From: "Alfred E. Heggestad" <alfred.heggestad@gmail.com>
|
|
Date: Sat, 24 Apr 2021 11:41:22 +0200
|
|
Subject: [PATCH] cairo: remove deprecated module
|
|
|
|
the avformat module can be used for video test source:
|
|
|
|
video_source avformat,lavfi,testsrc2
|
|
---
|
|
README.md | 2 -
|
|
docs/examples/config | 1 -
|
|
mk/modules.mk | 1 -
|
|
modules/cairo/cairo.c | 347 ----------------------------------------
|
|
modules/cairo/module.mk | 12 --
|
|
src/config.c | 1 -
|
|
6 files changed, 364 deletions(-)
|
|
delete mode 100644 modules/cairo/cairo.c
|
|
delete mode 100644 modules/cairo/module.mk
|
|
|
|
diff --git a/README.md b/README.md
|
|
index 1ad82c9bd..d87a76564 100644
|
|
--- a/README.md
|
|
+++ b/README.md
|
|
@@ -110,7 +110,6 @@ Distributed under BSD license
|
|
* Video-drivers:
|
|
- iOS avcapture video-source
|
|
- FFmpeg/libav libavformat/avdevice input
|
|
- - Cairo video-source test module
|
|
- Direct Show video-source
|
|
- MacOSX AVCapture video-source
|
|
- RST media player
|
|
@@ -229,7 +228,6 @@ avcapture Video source using iOS AVFoundation video capture
|
|
avcodec Video codec using FFmpeg/libav libavcodec
|
|
avformat Video source using FFmpeg/libav libavformat
|
|
b2bua Back-to-Back User-Agent (B2BUA) module
|
|
-cairo Cairo video source
|
|
codec2 Codec2 low bit rate speech codec
|
|
cons UDP/TCP console UI driver
|
|
contact Contacts module
|
|
diff --git a/docs/examples/config b/docs/examples/config
|
|
index e0921b0fb..5e7a29b9a 100644
|
|
--- a/docs/examples/config
|
|
+++ b/docs/examples/config
|
|
@@ -122,7 +122,6 @@ module alsa.so
|
|
#module v4l2.so
|
|
#module v4l2_codec.so
|
|
#module x11grab.so
|
|
-#module cairo.so
|
|
#module vidbridge.so
|
|
|
|
# Video display modules
|
|
diff --git a/mk/modules.mk b/mk/modules.mk
|
|
index ce7fd1313..d4e53a337 100644
|
|
--- a/mk/modules.mk
|
|
+++ b/mk/modules.mk
|
|
@@ -333,7 +333,6 @@ ifneq ($(USE_AVFILTER),)
|
|
MODULES += avfilter
|
|
endif
|
|
ifneq ($(USE_CAIRO),)
|
|
-MODULES += cairo
|
|
ifneq ($(USE_MPG123),)
|
|
MODULES += rst
|
|
endif
|
|
diff --git a/modules/cairo/cairo.c b/modules/cairo/cairo.c
|
|
deleted file mode 100644
|
|
index 85cef8031..000000000
|
|
--- a/modules/cairo/cairo.c
|
|
+++ /dev/null
|
|
@@ -1,347 +0,0 @@
|
|
-/**
|
|
- * @file cairo.c Cairo module
|
|
- *
|
|
- * Copyright (C) 2010 Alfred E. Heggestad
|
|
- */
|
|
-#define _DEFAULT_SOURCE 1
|
|
-#define _BSD_SOURCE 1
|
|
-#include <unistd.h>
|
|
-#include <pthread.h>
|
|
-#include <math.h>
|
|
-#include <re.h>
|
|
-#include <rem.h>
|
|
-#include <baresip.h>
|
|
-#include <cairo/cairo.h>
|
|
-
|
|
-
|
|
-#if !defined (M_PI)
|
|
-#define M_PI 3.14159265358979323846264338327
|
|
-#endif
|
|
-
|
|
-
|
|
-/**
|
|
- * @defgroup cairo cairo
|
|
- *
|
|
- * Cairo video-source module is a video generator for testing
|
|
- * and demo purposes.
|
|
- *
|
|
- * Note: This module is very experimental!
|
|
- *
|
|
- * Use Cairo library to draw graphics into a frame buffer
|
|
- */
|
|
-
|
|
-
|
|
-enum {
|
|
- FONT_SIZE = 18
|
|
-};
|
|
-
|
|
-struct vidsrc_st {
|
|
- struct vidsrc_prm prm;
|
|
- struct vidsz size;
|
|
- cairo_surface_t *surface;
|
|
- cairo_t *cr;
|
|
- cairo_surface_t *surface_logo;
|
|
- cairo_t *cr_logo;
|
|
- double logo_width;
|
|
- double logo_height;
|
|
- double step;
|
|
- bool run;
|
|
- pthread_t thread;
|
|
- vidsrc_frame_h *frameh;
|
|
- void *arg;
|
|
-};
|
|
-
|
|
-
|
|
-static struct vidsrc *vidsrc;
|
|
-
|
|
-
|
|
-static void destructor(void *arg)
|
|
-{
|
|
- struct vidsrc_st *st = arg;
|
|
-
|
|
- if (st->run) {
|
|
- st->run = false;
|
|
- pthread_join(st->thread, NULL);
|
|
- }
|
|
-
|
|
- if (st->cr)
|
|
- cairo_destroy(st->cr);
|
|
- if (st->surface)
|
|
- cairo_surface_destroy(st->surface);
|
|
-
|
|
- if (st->cr_logo)
|
|
- cairo_destroy(st->cr_logo);
|
|
- if (st->surface_logo)
|
|
- cairo_surface_destroy(st->surface_logo);
|
|
-}
|
|
-
|
|
-
|
|
-static void draw_background(cairo_t *cr, double color_step,
|
|
- int width, int height)
|
|
-{
|
|
- cairo_pattern_t *pat;
|
|
- double grey, r, g, b;
|
|
-
|
|
- grey = 0.1 + fabs(sin(3 * color_step));
|
|
- r = grey;
|
|
- g = grey;
|
|
- b = grey;
|
|
-
|
|
- pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, height);
|
|
- cairo_pattern_add_color_stop_rgba (pat, 1, r, g, b, 1);
|
|
- cairo_pattern_add_color_stop_rgba (pat, 0, 0, 0, 0, 1);
|
|
- cairo_rectangle (cr, 0, 0, width, height);
|
|
- cairo_set_source (cr, pat);
|
|
- cairo_fill (cr);
|
|
- cairo_pattern_destroy (pat);
|
|
-}
|
|
-
|
|
-
|
|
-static void draw_text(struct vidsrc_st *st, int x, int y,
|
|
- const char *fmt, ...)
|
|
-{
|
|
- char buf[4096] = "";
|
|
- va_list ap;
|
|
-
|
|
- va_start(ap, fmt);
|
|
- (void)re_vsnprintf(buf, sizeof(buf), fmt, ap);
|
|
- va_end(ap);
|
|
-
|
|
- cairo_set_source_rgb(st->cr, 1.0, 1.0, 1.0); /* white */
|
|
-
|
|
- cairo_set_font_size(st->cr, FONT_SIZE);
|
|
- cairo_move_to(st->cr, x, y);
|
|
- cairo_show_text(st->cr, buf);
|
|
-}
|
|
-
|
|
-
|
|
-static void draw_logo(struct vidsrc_st *st)
|
|
-{
|
|
- double x, y;
|
|
-
|
|
- x = (st->size.w - st->logo_width) * (sin(10 * st->step) + 1)/2;
|
|
- y = (st->size.h - st->logo_height)* (1 - fabs(sin(30 * st->step)));
|
|
-
|
|
- cairo_set_source_surface(st->cr, st->surface_logo, x, y);
|
|
- cairo_paint(st->cr);
|
|
-}
|
|
-
|
|
-
|
|
-static void process(struct vidsrc_st *st, uint64_t timestamp)
|
|
-{
|
|
- struct vidframe f;
|
|
- unsigned xoffs = 2, yoffs = 24;
|
|
-
|
|
- draw_background(st->cr, st->step, st->size.w, st->size.h);
|
|
-
|
|
- draw_text(st, xoffs, yoffs + FONT_SIZE, "%H", fmt_gmtime, NULL);
|
|
-
|
|
- draw_text(st, xoffs, yoffs + FONT_SIZE*2, "%u x %u @ %.2f fps",
|
|
- st->size.w, st->size.h, st->prm.fps);
|
|
-
|
|
- draw_text(st, xoffs, yoffs + FONT_SIZE*3, "Time: %.3f sec",
|
|
- timestamp / (double)VIDEO_TIMEBASE);
|
|
-
|
|
- draw_logo(st);
|
|
-
|
|
- st->step += 0.02 / st->prm.fps;
|
|
-
|
|
- vidframe_init_buf(&f, VID_FMT_RGB32, &st->size,
|
|
- cairo_image_surface_get_data(st->surface));
|
|
-
|
|
- st->frameh(&f, timestamp, st->arg);
|
|
-}
|
|
-
|
|
-
|
|
-static void *read_thread(void *arg)
|
|
-{
|
|
- struct vidsrc_st *st = arg;
|
|
- uint64_t ts = 0, ts_start = 0;
|
|
-
|
|
- while (st->run) {
|
|
-
|
|
- uint64_t now;
|
|
- uint64_t timestamp;
|
|
-
|
|
- sys_msleep(2);
|
|
-
|
|
- now = tmr_jiffies();
|
|
- if (!ts) {
|
|
- ts = ts_start = now;
|
|
- }
|
|
-
|
|
- if (ts > now)
|
|
- continue;
|
|
-
|
|
- timestamp = (ts - ts_start) * VIDEO_TIMEBASE / 1000;
|
|
-
|
|
- process(st, timestamp);
|
|
-
|
|
- ts += 1000/st->prm.fps;
|
|
- }
|
|
-
|
|
- return NULL;
|
|
-}
|
|
-
|
|
-
|
|
-static int load_logo(struct vidsrc_st *st, const char *filename)
|
|
-{
|
|
- cairo_surface_t *logo;
|
|
- double lw;
|
|
- double scale;
|
|
- int err = 0;
|
|
-
|
|
- logo = cairo_image_surface_create_from_png(filename);
|
|
- if (!logo) {
|
|
- warning("cairo: failed to load PNG logo\n");
|
|
- err = ENOENT;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- if (!cairo_image_surface_get_width(logo) ||
|
|
- !cairo_image_surface_get_height(logo)) {
|
|
- warning("cairo: invalid logo (%s)\n", filename);
|
|
- err = ENOENT;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- st->logo_width = st->size.w / 2;
|
|
- lw = cairo_image_surface_get_width(logo);
|
|
- scale = (double)st->logo_width / (double)lw;
|
|
-
|
|
- st->logo_height = cairo_image_surface_get_height(logo) * scale;
|
|
-
|
|
- /* create a scaled-down logo with same aspect ratio */
|
|
-
|
|
- st->surface_logo = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
|
- st->logo_width,
|
|
- st->logo_height);
|
|
- if (!st->surface_logo) {
|
|
- err = ENOMEM;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- st->cr_logo = cairo_create(st->surface_logo);
|
|
- if (!st->cr_logo) {
|
|
- err = ENOMEM;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- cairo_scale(st->cr_logo, scale, scale);
|
|
-
|
|
- cairo_set_source_surface(st->cr_logo, logo, 0, 0);
|
|
- cairo_paint(st->cr_logo);
|
|
-
|
|
- info("cairo: scaling logo '%s' from %d x %d to %.1f x %.1f\n",
|
|
- filename,
|
|
- cairo_image_surface_get_width(logo),
|
|
- cairo_image_surface_get_height(logo),
|
|
- st->logo_width,
|
|
- st->logo_height);
|
|
-
|
|
- out:
|
|
- if (logo)
|
|
- cairo_surface_destroy(logo);
|
|
- return err;
|
|
-}
|
|
-
|
|
-
|
|
-static int alloc(struct vidsrc_st **stp, const struct vidsrc *vs,
|
|
- struct media_ctx **ctx, struct vidsrc_prm *prm,
|
|
- const struct vidsz *size, const char *fmt,
|
|
- const char *dev, vidsrc_frame_h *frameh,
|
|
- vidsrc_error_h *errorh, void *arg)
|
|
-{
|
|
- struct config *cfg;
|
|
- struct vidsrc_st *st;
|
|
- char logo[256];
|
|
- int err = 0;
|
|
-
|
|
- (void)ctx;
|
|
- (void)fmt;
|
|
- (void)dev;
|
|
- (void)errorh;
|
|
- (void)vs;
|
|
-
|
|
- if (!stp || !prm || !size || !frameh)
|
|
- return EINVAL;
|
|
-
|
|
- cfg = conf_config();
|
|
- if (!cfg)
|
|
- return EINVAL;
|
|
-
|
|
- st = mem_zalloc(sizeof(*st), destructor);
|
|
- if (!st)
|
|
- return ENOMEM;
|
|
-
|
|
- st->frameh = frameh;
|
|
- st->arg = arg;
|
|
- st->prm = *prm;
|
|
- st->size = *size;
|
|
-
|
|
- st->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
|
- size->w, size->h);
|
|
- if (!st->surface) {
|
|
- err = ENOMEM;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- st->cr = cairo_create(st->surface);
|
|
- if (!st->cr) {
|
|
- err = ENOMEM;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- cairo_select_font_face(st->cr, "Sans",
|
|
- CAIRO_FONT_SLANT_NORMAL,
|
|
- CAIRO_FONT_WEIGHT_BOLD);
|
|
-
|
|
- info("cairo: surface with resolution %d x %d\n",
|
|
- cairo_image_surface_get_width(st->surface),
|
|
- cairo_image_surface_get_height(st->surface));
|
|
-
|
|
- st->step = rand_u16() / 1000.0;
|
|
-
|
|
- re_snprintf(logo, sizeof(logo), "%s/logo.png", cfg->audio.audio_path);
|
|
-
|
|
- err = load_logo(st, logo);
|
|
- if (err)
|
|
- goto out;
|
|
-
|
|
- st->run = true;
|
|
- err = pthread_create(&st->thread, NULL, read_thread, st);
|
|
- if (err) {
|
|
- st->run = false;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- out:
|
|
- if (err)
|
|
- mem_deref(st);
|
|
- else
|
|
- *stp = st;
|
|
-
|
|
- return err;
|
|
-}
|
|
-
|
|
-
|
|
-static int module_init(void)
|
|
-{
|
|
- return vidsrc_register(&vidsrc, baresip_vidsrcl(),
|
|
- "cairo", alloc, NULL);
|
|
-}
|
|
-
|
|
-
|
|
-static int module_close(void)
|
|
-{
|
|
- vidsrc = mem_deref(vidsrc);
|
|
- return 0;
|
|
-}
|
|
-
|
|
-
|
|
-EXPORT_SYM const struct mod_export DECL_EXPORTS(cairo) = {
|
|
- "cairo",
|
|
- "vidsrc",
|
|
- module_init,
|
|
- module_close
|
|
-};
|
|
diff --git a/modules/cairo/module.mk b/modules/cairo/module.mk
|
|
deleted file mode 100644
|
|
index 01e3dc7cc..000000000
|
|
--- a/modules/cairo/module.mk
|
|
+++ /dev/null
|
|
@@ -1,12 +0,0 @@
|
|
-#
|
|
-# module.mk
|
|
-#
|
|
-# Copyright (C) 2010 Alfred E. Heggestad
|
|
-#
|
|
-
|
|
-MOD := cairo
|
|
-$(MOD)_SRCS += cairo.c
|
|
-$(MOD)_LFLAGS += $(shell pkg-config --libs cairo)
|
|
-$(MOD)_CFLAGS += $(shell pkg-config --cflags cairo)
|
|
-
|
|
-include mk/mod.mk
|
|
diff --git a/src/config.c b/src/config.c
|
|
index f12dc5a31..483d374c1 100644
|
|
--- a/src/config.c
|
|
+++ b/src/config.c
|
|
@@ -911,7 +911,6 @@ int config_write_template(const char *file, const struct config *cfg)
|
|
(void)re_fprintf(f, "#module\t\t\t" "v4l2_codec" MOD_EXT "\n");
|
|
#endif
|
|
(void)re_fprintf(f, "#module\t\t\t" "x11grab" MOD_EXT "\n");
|
|
- (void)re_fprintf(f, "#module\t\t\t" "cairo" MOD_EXT "\n");
|
|
(void)re_fprintf(f, "#module\t\t\t" "vidbridge" MOD_EXT "\n");
|
|
|
|
(void)re_fprintf(f, "\n# Video display modules\n");
|