Commit 0163a876 authored by David Schleef's avatar David Schleef

configure.ac: add audioresample and cairo plugins. Remove

Original commit message from CVS:
* configure.ac: add audioresample and cairo plugins.  Remove
HAVE_MMX stuff, because it's not used.
* ext/Makefile.am: same
* ext/audioresample/Makefile.am: You are not ready for an
audio resampling element based on audioresample.
* ext/audioresample/gstaudioresample.c:
* ext/audioresample/gstaudioresample.h:
* ext/cairo/Makefile.am: You are not ready for overlay elements
based on cairo.  Don't look too closely, these elements kinda
suck right now.
* ext/cairo/gstcairo.c: new
* ext/cairo/gsttextoverlay.c: new
* ext/cairo/gsttextoverlay.h: new
* ext/cairo/gsttimeoverlay.c: new
* ext/cairo/gsttimeoverlay.h: new
* gst-libs/gst/media-info/media-info-priv.h: fix compile
problem with compilers that don't support variadic macros.
parent 4c750ac9
2004-12-15 David Schleef <ds@schleef.org>
* configure.ac: add audioresample and cairo plugins. Remove
HAVE_MMX stuff, because it's not used.
* ext/Makefile.am: same
* ext/audioresample/Makefile.am: You are not ready for an
audio resampling element based on audioresample.
* ext/audioresample/gstaudioresample.c:
* ext/audioresample/gstaudioresample.h:
* ext/cairo/Makefile.am: You are not ready for overlay elements
based on cairo. Don't look too closely, these elements kinda
suck right now.
* ext/cairo/gstcairo.c: new
* ext/cairo/gsttextoverlay.c: new
* ext/cairo/gsttextoverlay.h: new
* ext/cairo/gsttimeoverlay.c: new
* ext/cairo/gsttimeoverlay.h: new
* gst-libs/gst/media-info/media-info-priv.h: fix compile
problem with compilers that don't support variadic macros.
2004-12-15 Balamurali Viswanathan <balamurali.viswanathan@wipro.com>
Reviewed by: David Schleef <ds@schleef.org>
......
......@@ -806,6 +806,22 @@ GST_CHECK_FEATURE(AUDIOFILE, [audiofile], afsink afsrc, [
AC_CHECK_LIB(audiofile, af_virtual_file_new, , HAVE_AUDIOFILE="no")
fi])
dnl *** audioresample ***
translit(dnm, m, l) AM_CONDITIONAL(USE_AUDIORESAMPLE, true)
GST_CHECK_FEATURE(AUDIORESAMPLE, [audioresample plug-in], audioresample, [
PKG_CHECK_MODULES(AUDIORESAMPLE, audioresample-0.1, HAVE_AUDIORESAMPLE=yes, HAVE_AUDIORESAMPLE=no)
AC_SUBST(AUDIORESAMPLE_CFLAGS)
AC_SUBST(AUDIORESAMPLE_LIBS)
])
dnl *** cairo ***
translit(dnm, m, l) AM_CONDITIONAL(USE_CAIRO, true)
GST_CHECK_FEATURE(CAIRO, [cairo plug-in], cairo, [
PKG_CHECK_MODULES(CAIRO, cairo, HAVE_CAIRO=yes, HAVE_CAIRO=no)
AC_SUBST(CAIRO_CFLAGS)
AC_SUBST(CAIRO_LIBS)
])
dnl *** cdaudio ***
translit(dnm, m, l) AM_CONDITIONAL(USE_CDAUDIO, true)
GST_CHECK_FEATURE(CDAUDIO, [cdaudio], cdaudio, [
......@@ -1722,15 +1738,6 @@ dnl ######################################################################
dnl # Check command line parameters, and set shell variables accordingly #
dnl ######################################################################
AC_ARG_ENABLE(libmmx,
AC_HELP_STRING([--enable-libmmx],[use libmmx, if available]),
[case "${enableval}" in
yes) USE_LIBMMX=$HAVE_LIBMMX ;;
no) USE_LIBMMX=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-libmmx) ;;
esac],
[USE_LIBMMX=$HAVE_LIBMMX]) dnl Default value
AC_ARG_ENABLE(atomic,
AC_HELP_STRING([--enable-atomic],[use atomic reference counting header]),
[case "${enableval}" in
......@@ -1783,10 +1790,6 @@ dnl # Set defines according to variables set above #
dnl ################################################
if test "x$USE_LIBMMX" = xyes; then
AC_DEFINE(HAVE_LIBMMX, 1, [Define if libmmx is available])
fi
if test "x$USE_ATOMIC_H" = xyes; then
AC_DEFINE(HAVE_ATOMIC_H, 1, [Define if atomic.h header file is available])
fi
......@@ -1804,8 +1807,6 @@ dnl #############################
dnl These should be "USE_*" instead of "HAVE_*", but some packages expect
dnl HAVE_ and it is likely to be easier to stick with the old name
AM_CONDITIONAL(HAVE_LIBMMX, test "x$USE_LIBMMX" = "xyes")
AM_CONDITIONAL(HAVE_ATOMIC_H, test "x$USE_ATOMIC_H" = "xyes")
AM_CONDITIONAL(EXPERIMENTAL, test "$EXPERIMENTAL" = "$xyes")
......@@ -1980,6 +1981,8 @@ ext/alsa/Makefile
ext/arts/Makefile
ext/artsd/Makefile
ext/audiofile/Makefile
ext/audioresample/Makefile
ext/cairo/Makefile
ext/cdaudio/Makefile
ext/cdparanoia/Makefile
ext/dirac/Makefile
......
......@@ -34,6 +34,18 @@ else
AUDIOFILE_DIR=
endif
if USE_AUDIORESAMPLE
AUDIORESAMPLE_DIR=audioresample
else
AUDIORESAMPLE_DIR=
endif
if USE_CAIRO
CAIRO_DIR=cairo
else
CAIRO_DIR=
endif
if USE_CDAUDIO
CDAUDIO_DIR=cdaudio
else
......@@ -383,6 +395,8 @@ SUBDIRS=\
$(ARTS_DIR) \
$(ARTSC_DIR) \
$(AUDIOFILE_DIR) \
$(AUDIORESAMPLE_DIR) \
$(CAIRO_DIR) \
$(CDAUDIO_DIR) \
$(CDPARANOIA_DIR) \
$(DIRAC_DIR) \
......@@ -446,6 +460,8 @@ DIST_SUBDIRS=\
arts \
artsd \
audiofile \
audioresample \
cairo \
cdaudio \
cdparanoia \
dirac \
......
plugin_LTLIBRARIES = libgstcairo.la
noinst_HEADERS = gsttimeoverlay.h gsttextoverlay.h
libgstcairo_la_SOURCES = \
gsttimeoverlay.c \
gsttextoverlay.c \
gstcairo.c
libgstcairo_la_CFLAGS = $(GST_CFLAGS) $(CAIRO_CFLAGS) \
-I$(top_srcdir)/gst/videofilter
libgstcairo_la_LIBADD =
libgstcairo_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(CAIRO_LIBS) -lm
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
* Copyright (C) <2003,2004> David Schleef <ds@schleef.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
/*#define DEBUG_ENABLED */
#include <gsttimeoverlay.h>
#include <gsttextoverlay.h>
#include <string.h>
#include <math.h>
static gboolean
plugin_init (GstPlugin * plugin)
{
if (!gst_library_load ("gstvideofilter"))
return FALSE;
gst_element_register (plugin, "cairotextoverlay", GST_RANK_NONE,
GST_TYPE_TEXTOVERLAY);
gst_element_register (plugin, "cairotimeoverlay", GST_RANK_NONE,
GST_TYPE_TIMEOVERLAY);
return TRUE;
}
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, "timeoverlay",
"Time overlay", plugin_init, VERSION, GST_LICENSE, GST_PACKAGE, GST_ORIGIN)
This diff is collapsed.
#ifndef __GST_TEXTOVERLAY_H__
#define __GST_TEXTOVERLAY_H__
#include <gst/gst.h>
#include <cairo.h>
G_BEGIN_DECLS
#define GST_TYPE_TEXTOVERLAY (gst_textoverlay_get_type())
#define GST_TEXTOVERLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),\
GST_TYPE_TEXTOVERLAY, GstTextOverlay))
#define GST_TEXTOVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),\
GST_TYPE_ULAW, GstTextOverlay))
#define GST_TEXTOVERLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),\
GST_TYPE_TEXTOVERLAY, GstTextOverlayClass))
#define GST_IS_TEXTOVERLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),\
GST_TYPE_TEXTOVERLAY))
#define GST_IS_TEXTOVERLAY_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),\
GST_TYPE_TEXTOVERLAY))
typedef struct _GstTextOverlay GstTextOverlay;
typedef struct _GstTextOverlayClass GstTextOverlayClass;
typedef enum _GstTextOverlayVAlign GstTextOverlayVAlign;
typedef enum _GstTextOverlayHAlign GstTextOverlayHAlign;
enum _GstTextOverlayVAlign {
GST_TEXT_OVERLAY_VALIGN_BASELINE,
GST_TEXT_OVERLAY_VALIGN_BOTTOM,
GST_TEXT_OVERLAY_VALIGN_TOP
};
enum _GstTextOverlayHAlign {
GST_TEXT_OVERLAY_HALIGN_LEFT,
GST_TEXT_OVERLAY_HALIGN_CENTER,
GST_TEXT_OVERLAY_HALIGN_RIGHT
};
struct _GstTextOverlay {
GstElement element;
GstPad *video_sinkpad;
GstPad *text_sinkpad;
GstPad *srcpad;
gint width;
gint height;
GstTextOverlayVAlign valign;
GstTextOverlayHAlign halign;
gint x0;
gint y0;
gchar *default_text;
cairo_t *cr;
guchar *pixbuf;
int text_width;
int text_height;
GstBuffer *current_buffer;
GstBuffer *next_buffer;
gboolean need_render;
};
struct _GstTextOverlayClass {
GstElementClass parent_class;
};
GType gst_textoverlay_get_type(void) G_GNUC_CONST;
G_END_DECLS
#endif /* __GST_TEXTOVERLAY_H */
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
* Copyright (C) <2003> David Schleef <ds@schleef.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*
* This file was (probably) generated from gsttimeoverlay.c,
* gsttimeoverlay.c,v 1.7 2003/11/08 02:48:59 dschleef Exp
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
/*#define DEBUG_ENABLED */
#include <gsttimeoverlay.h>
#include <string.h>
#include <math.h>
#include <cairo.h>
/* GstTimeoverlay signals and args */
enum
{
/* FILL ME */
LAST_SIGNAL
};
enum
{
ARG_0
/* FILL ME */
};
static void gst_timeoverlay_base_init (gpointer g_class);
static void gst_timeoverlay_class_init (gpointer g_class, gpointer class_data);
static void gst_timeoverlay_init (GTypeInstance * instance, gpointer g_class);
static void gst_timeoverlay_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_timeoverlay_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void gst_timeoverlay_planar411 (GstVideofilter * videofilter, void *dest,
void *src);
static void gst_timeoverlay_setup (GstVideofilter * videofilter);
GType
gst_timeoverlay_get_type (void)
{
static GType timeoverlay_type = 0;
if (!timeoverlay_type) {
static const GTypeInfo timeoverlay_info = {
sizeof (GstTimeoverlayClass),
gst_timeoverlay_base_init,
NULL,
gst_timeoverlay_class_init,
NULL,
NULL,
sizeof (GstTimeoverlay),
0,
gst_timeoverlay_init,
};
timeoverlay_type = g_type_register_static (GST_TYPE_VIDEOFILTER,
"GstTimeoverlay", &timeoverlay_info, 0);
}
return timeoverlay_type;
}
static GstVideofilterFormat gst_timeoverlay_formats[] = {
{"I420", 12, gst_timeoverlay_planar411,},
};
static void
gst_timeoverlay_base_init (gpointer g_class)
{
static GstElementDetails timeoverlay_details =
GST_ELEMENT_DETAILS ("Time Overlay",
"Filter/Editor/Video",
"Overlays the time on a video stream",
"David Schleef <ds@schleef.org>");
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
GstVideofilterClass *videofilter_class = GST_VIDEOFILTER_CLASS (g_class);
int i;
gst_element_class_set_details (element_class, &timeoverlay_details);
for (i = 0; i < G_N_ELEMENTS (gst_timeoverlay_formats); i++) {
gst_videofilter_class_add_format (videofilter_class,
gst_timeoverlay_formats + i);
}
gst_videofilter_class_add_pad_templates (GST_VIDEOFILTER_CLASS (g_class));
}
static void
gst_timeoverlay_class_init (gpointer g_class, gpointer class_data)
{
GObjectClass *gobject_class;
GstVideofilterClass *videofilter_class;
gobject_class = G_OBJECT_CLASS (g_class);
videofilter_class = GST_VIDEOFILTER_CLASS (g_class);
#if 0
g_object_class_install_property (gobject_class, ARG_METHOD,
g_param_spec_enum ("method", "method", "method",
GST_TYPE_TIMEOVERLAY_METHOD, GST_TIMEOVERLAY_METHOD_1,
G_PARAM_READWRITE));
#endif
gobject_class->set_property = gst_timeoverlay_set_property;
gobject_class->get_property = gst_timeoverlay_get_property;
videofilter_class->setup = gst_timeoverlay_setup;
}
static void
gst_timeoverlay_init (GTypeInstance * instance, gpointer g_class)
{
GstTimeoverlay *timeoverlay = GST_TIMEOVERLAY (instance);
GstVideofilter *videofilter;
GST_DEBUG ("gst_timeoverlay_init");
videofilter = GST_VIDEOFILTER (timeoverlay);
/* do stuff */
}
static void
gst_timeoverlay_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
GstTimeoverlay *src;
/* it's not null if we got it, but it might not be ours */
g_return_if_fail (GST_IS_TIMEOVERLAY (object));
src = GST_TIMEOVERLAY (object);
GST_DEBUG ("gst_timeoverlay_set_property");
switch (prop_id) {
#if 0
case ARG_METHOD:
src->method = g_value_get_enum (value);
break;
#endif
default:
break;
}
}
static void
gst_timeoverlay_get_property (GObject * object, guint prop_id, GValue * value,
GParamSpec * pspec)
{
GstTimeoverlay *src;
/* it's not null if we got it, but it might not be ours */
g_return_if_fail (GST_IS_TIMEOVERLAY (object));
src = GST_TIMEOVERLAY (object);
switch (prop_id) {
#if 0
case ARG_METHOD:
g_value_set_enum (value, src->method);
break;
#endif
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gst_timeoverlay_setup (GstVideofilter * videofilter)
{
GstTimeoverlay *timeoverlay;
cairo_font_extents_t font_extents;
g_return_if_fail (GST_IS_TIMEOVERLAY (videofilter));
timeoverlay = GST_TIMEOVERLAY (videofilter);
/* if any setup needs to be done, do it here */
timeoverlay->cr = cairo_create ();
cairo_set_rgb_color (timeoverlay->cr, 0, 0, 0);
cairo_select_font (timeoverlay->cr, "monospace", 0, 0);
cairo_scale_font (timeoverlay->cr, 20);
cairo_current_font_extents (timeoverlay->cr, &font_extents);
timeoverlay->text_height = font_extents.height;
}
static char *
gst_timeoverlay_print_smpte_time (guint64 time)
{
int hours;
int minutes;
int seconds;
int ms;
double x;
x = rint ((time + 500000) * 1e-6);
hours = floor (x / (60 * 60 * 1000));
x -= hours * 60 * 60 * 1000;
minutes = floor (x / (60 * 1000));
x -= minutes * 60 * 1000;
seconds = floor (x / (1000));
x -= seconds * 1000;
ms = rint (x);
return g_strdup_printf ("%02d:%02d:%02d.%03d", hours, minutes, seconds, ms);
}
static void
gst_timeoverlay_planar411 (GstVideofilter * videofilter, void *dest, void *src)
{
GstTimeoverlay *timeoverlay;
int width;
int height;
int b_width;
char *string;
int i, j;
uint8_t *image;
cairo_text_extents_t extents;
g_return_if_fail (GST_IS_TIMEOVERLAY (videofilter));
timeoverlay = GST_TIMEOVERLAY (videofilter);
width = gst_videofilter_get_input_width (videofilter);
height = gst_videofilter_get_input_height (videofilter);
string =
gst_timeoverlay_print_smpte_time (GST_BUFFER_TIMESTAMP (videofilter->
in_buf));
image = g_malloc (4 * width * timeoverlay->text_height);
cairo_set_target_image (timeoverlay->cr, image, CAIRO_FORMAT_ARGB32,
width, timeoverlay->text_height, width * 4);
cairo_save (timeoverlay->cr);
cairo_rectangle (timeoverlay->cr, 0, 0, width, timeoverlay->text_height);
cairo_set_alpha (timeoverlay->cr, 0);
cairo_set_operator (timeoverlay->cr, CAIRO_OPERATOR_SRC);
cairo_fill (timeoverlay->cr);
cairo_restore (timeoverlay->cr);
cairo_save (timeoverlay->cr);
cairo_text_extents (timeoverlay->cr, string, &extents);
cairo_set_rgb_color (timeoverlay->cr, 1, 1, 1);
cairo_move_to (timeoverlay->cr, 0, timeoverlay->text_height - 2);
cairo_show_text (timeoverlay->cr, string);
g_free (string);
#if 0
cairo_text_path (timeoverlay->cr, string);
cairo_set_rgb_color (timeoverlay->cr, 1, 1, 1);
cairo_set_line_width (timeoverlay->cr, 1.0);
cairo_stroke (timeoverlay->cr);
#endif
cairo_restore (timeoverlay->cr);
b_width = extents.width;
if (b_width > width)
b_width = width;
memcpy (dest, src, videofilter->from_buf_size);
for (i = 0; i < timeoverlay->text_height; i++) {
for (j = 0; j < b_width; j++) {
((uint8_t *) dest)[i * width + j] = image[(i * width + j) * 4 + 0];
}
}
for (i = 0; i < timeoverlay->text_height / 2; i++) {
memset (dest + width * height + i * (width / 2), 128, b_width / 2);
memset (dest + width * height + (width / 2) * (height / 2) +
i * (width / 2), 128, b_width / 2);
}
g_free (image);
}
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __GST_TIMEOVERLAY_H__
#define __GST_TIMEOVERLAY_H__
#include <gst/gst.h>
#include <cairo.h>
#include "gstvideofilter.h"
G_BEGIN_DECLS
#define GST_TYPE_TIMEOVERLAY \
(gst_timeoverlay_get_type())
#define GST_TIMEOVERLAY(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TIMEOVERLAY,GstTimeoverlay))
#define GST_TIMEOVERLAY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TIMEOVERLAY,GstTimeoverlayClass))
#define GST_IS_TIMEOVERLAY(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TIMEOVERLAY))
#define GST_IS_TIMEOVERLAY_CLASS(obj) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TIMEOVERLAY))
typedef struct _GstTimeoverlay GstTimeoverlay;
typedef struct _GstTimeoverlayClass GstTimeoverlayClass;
struct _GstTimeoverlay {
GstVideofilter videofilter;
cairo_t *cr;
int text_height;
};
struct _GstTimeoverlayClass {
GstVideofilterClass parent_class;
};
GType gst_timeoverlay_get_type(void);
G_END_DECLS
#endif /* __GST_TIMEOVERLAY_H__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment