diff options
author | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-01-10 05:22:13 +0000 |
---|---|---|
committer | Joe Marcus Clarke <marcus@FreeBSD.org> | 2009-01-10 05:22:13 +0000 |
commit | 610ae5681637c1051a0c17b54e29d97f53da2f3a (patch) | |
tree | c231a1eb74b07e444fa7363012cb84bf23d83ce0 /graphics/swfdec | |
parent | 15b6544926b07a98710eeb765baf03e3fc9a195c (diff) |
Notes
Diffstat (limited to 'graphics/swfdec')
-rw-r--r-- | graphics/swfdec/Makefile | 41 | ||||
-rw-r--r-- | graphics/swfdec/distinfo | 6 | ||||
-rw-r--r-- | graphics/swfdec/files/patch-configure | 24 | ||||
-rw-r--r-- | graphics/swfdec/files/patch-swfdec-gtk_Makefile.in | 10 | ||||
-rw-r--r-- | graphics/swfdec/files/swfdec_playback_oss.c | 265 | ||||
-rw-r--r-- | graphics/swfdec/pkg-plist | 18 |
6 files changed, 331 insertions, 33 deletions
diff --git a/graphics/swfdec/Makefile b/graphics/swfdec/Makefile index 6afb5bc2f191..a8cf987e80bd 100644 --- a/graphics/swfdec/Makefile +++ b/graphics/swfdec/Makefile @@ -4,12 +4,12 @@ # Whom: ijliao # # $FreeBSD$ -# +# $MCom: ports/graphics/swfdec/Makefile,v 1.28 2009/01/01 13:38:17 kwm Exp $ PORTNAME= swfdec -PORTVERSION= 0.6.8 +PORTVERSION= 0.8.4 CATEGORIES= graphics -MASTER_SITES= http://swfdec.freedesktop.org/download/swfdec/0.6/ +MASTER_SITES= http://swfdec.freedesktop.org/download/swfdec/0.8/ MAINTAINER= kwm@FreeBSD.org COMMENT= Flash Rendering Library @@ -17,33 +17,32 @@ COMMENT= Flash Rendering Library LIB_DEPENDS= oil-0.3.0:${PORTSDIR}/devel/liboil \ soup-2.4.1:${PORTSDIR}/devel/libsoup -USE_GNOME= gnomehack gtk20 -USE_AUTOTOOLS= libtool:15:env automake:19:env autoconf:262 -GNU_CONFIGURE= yes -CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" \ - LDFLAGS="-Wl,-Bsymbolic -L${LOCALBASE}/lib" -CONFIGURE_ARGS= --with-audio=oss USE_LDCONFIG= yes -INSTALLS_ICONS= yes - -CPPFLAGS= -I${LOCALBASE}/include - -OPTIONS= GSTREAMER "Support for decoding some codecs with GStreamer" off +USE_GNOME= gnomehack gtk20 ltverhack +USE_GSTREAMER= core good mp3 ffmpeg +USE_AUTOTOOLS= libtool:15 +CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ + LDFLAGS="-Wl,-Bsymbolic -L${LOCALBASE}/lib" PLIST_SUB= VERSION=${PORTVERSION:R} +OPTIONS= PULSEAUDIO "Enable the PulseAudio sound module" off + .include <bsd.port.pre.mk> -.if defined(WITH_GSTREAMER) -USE_GSTREAMER= yes +.if defined(WITH_PULSEAUDIO) +LIB_DEPENDS+= pulse.0:${PORTSDIR}/audio/pulseaudio +CONFIGURE_ARGS+= --with-audio=pulse .else -LIB_DEPENDS+= avcodec.1:${PORTSDIR}/multimedia/ffmpeg \ - mad.2:${PORTSDIR}/audio/libmad -CONFIGURE_ARGS+= --disable-gstreamer --enable-ffmpeg --enable-mad -CPPFLAGS+= -I${LOCALBASE}/include/ffmpeg +CONFIGURE_ARGS+= --with-audio=oss .endif +post-extract: + @${CP} ${FILESDIR}/swfdec_playback_oss.c \ + ${WRKSRC}/swfdec-gtk + post-patch: - @${REINPLACE_CMD} -e 's|SWFDEC_LIBVERSION="0:0:0"|SWFDEC_LIBVERSION="1:0:0"|' ${WRKSRC}/configure.ac + @${REINPLACE_CMD} -e 's|-Wmissing-include-dirs||g' \ + ${WRKSRC}/configure .include <bsd.port.post.mk> diff --git a/graphics/swfdec/distinfo b/graphics/swfdec/distinfo index b072e8cdbd6a..9f92abedda34 100644 --- a/graphics/swfdec/distinfo +++ b/graphics/swfdec/distinfo @@ -1,3 +1,3 @@ -MD5 (swfdec-0.6.8.tar.gz) = 740caf52068556ffe151703342fb634b -SHA256 (swfdec-0.6.8.tar.gz) = dcbea3030b6fd3939256fbee4b8d5cf093399ff8597701abb92cb75e74d573fd -SIZE (swfdec-0.6.8.tar.gz) = 8775082 +MD5 (swfdec-0.8.4.tar.gz) = aece501d0e73f3e564200a44ec03c385 +SHA256 (swfdec-0.8.4.tar.gz) = 7a0fc63f25a6c85588fc094dd3433fbb43634d81a70164b3390fb8ef40cbd802 +SIZE (swfdec-0.8.4.tar.gz) = 9958443 diff --git a/graphics/swfdec/files/patch-configure b/graphics/swfdec/files/patch-configure new file mode 100644 index 000000000000..4f14187ab545 --- /dev/null +++ b/graphics/swfdec/files/patch-configure @@ -0,0 +1,24 @@ +--- configure.orig 2008-08-14 12:43:55.000000000 -0400 ++++ configure 2008-08-14 12:45:51.000000000 -0400 +@@ -1563,7 +1563,7 @@ Optional Packages: + both] + --with-tags[=TAGS] include additional configurations [automatic] + --with-pkg-config-path colon-separated list of pkg-config(1) dirs +- --with-audio=[auto/pulse/none] ++ --with-audio=[auto/pulse/oss/none] + audio backend to use + --with-html-dir=PATH path to installed docs + +@@ -22752,6 +22752,12 @@ echo "$as_me: WARNING: no alsa audio sup + fi + fi + ++if test "$with_audio" = "oss"; then ++ AUDIO_TYPE=oss ++ AUDIO_CFLAGS= ++ AUDIO_LIBS= ++fi ++ + if test "$with_audio" = "pulse"; then + + pkg_failed=no diff --git a/graphics/swfdec/files/patch-swfdec-gtk_Makefile.in b/graphics/swfdec/files/patch-swfdec-gtk_Makefile.in new file mode 100644 index 000000000000..ddd87704a1f1 --- /dev/null +++ b/graphics/swfdec/files/patch-swfdec-gtk_Makefile.in @@ -0,0 +1,10 @@ +--- swfdec-gtk/Makefile.in.orig 2008-08-14 12:41:05.000000000 -0400 ++++ swfdec-gtk/Makefile.in 2008-08-14 12:45:58.000000000 -0400 +@@ -281,6 +282,7 @@ libswfdec_@SWFDEC_MAJORMINOR@include_HEA + + EXTRA_DIST = \ + swfdec_playback_alsa.c \ ++ swfdec_playback_oss.c \ + swfdec_playback_pulse.c \ + swfdec_playback_none.c + diff --git a/graphics/swfdec/files/swfdec_playback_oss.c b/graphics/swfdec/files/swfdec_playback_oss.c new file mode 100644 index 000000000000..160f26db9669 --- /dev/null +++ b/graphics/swfdec/files/swfdec_playback_oss.c @@ -0,0 +1,265 @@ +/* Swfdec + * Copyright © 2006 Benjamin Otte <otte@gnome.org> + * Copyright © 2007 Eric Anholt <eric@anholt.net> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <sys/ioctl.h> +#include <sys/soundcard.h> +#include <fcntl.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#include "swfdec_playback.h" + +/** @file Implements swfdec audio playback by opening /dev/dsp per stream + * and playing out through that. + * + * Allowing multiple access to /dev/dsp is not required by the OSS API spec, + * but FreeBSD's sound system lets you, which is what this file was written + * for. + */ + +/*** DEFINITIONS ***/ + +struct _SwfdecPlayback { + SwfdecPlayer * player; + GList * streams; /* all Stream objects */ + GMainContext * context; /* context we work in */ +}; + +typedef struct { + SwfdecPlayback * sound; /* reference to sound object */ + SwfdecAudio * audio; /* the audio we play back */ + int dsp_fd; + int fragsize; /* Audio fragment size */ + GSource * source; /* source for writing data */ + guint offset; /* offset into sound */ +} Stream; + +/* Size of one of our audio samples, in bytes */ +#define SAMPLESIZE 2 +#define CHANNELS 2 + +/*** STREAMS ***/ + +static gboolean +handle_stream (GIOChannel *source, GIOCondition cond, gpointer data) +{ + Stream *stream = data; + char *frag = malloc(stream->fragsize); + + if (frag == NULL) { + g_printerr ("Failed to allocate fragment of size %d\n", + stream->fragsize); + return FALSE; + } + + while (TRUE) { + int ret; + audio_buf_info spaceinfo; + + ret = ioctl(stream->dsp_fd, SNDCTL_DSP_GETOSPACE, &spaceinfo); + if (ret == -1) { + g_printerr ("Failed to get output buffer availability\n"); + free(frag); + return FALSE; + } + + if (spaceinfo.fragments == 0) + break; + + memset (frag, 0, stream->fragsize); + swfdec_audio_render (stream->audio, (gint16 *)frag, stream->offset, + stream->fragsize / SAMPLESIZE / CHANNELS); + + ret = write (stream->dsp_fd, frag, stream->fragsize); + if (ret != stream->fragsize) { + g_printerr ("Failed to write fragment\n"); + free(frag); + return FALSE; + } + + stream->offset += stream->fragsize / SAMPLESIZE / CHANNELS; + } + + free(frag); + + return TRUE; +} + +static void +swfdec_playback_stream_open (SwfdecPlayback *sound, SwfdecAudio *audio) +{ + GIOChannel *channel; + Stream *stream; + guint rate; + int dsp_fd, ret, format, channels, fragsize; + + dsp_fd = open("/dev/dsp", O_WRONLY); + if (dsp_fd == -1) { + g_printerr ("Failed to open /dev/dsp\n"); + return; + } + + format = AFMT_S16_LE; + ret = ioctl(dsp_fd, SNDCTL_DSP_SETFMT, &format); + if (ret == -1) { + g_printerr ("Failed to set sound format\n"); + close(dsp_fd); + return; + } + + channels = 2; + ret = ioctl(dsp_fd, SNDCTL_DSP_CHANNELS, &channels); + if (ret == -1) { + g_printerr ("Failed to set stereo\n"); + close(dsp_fd); + return; + } + + rate = 44100; + ret = ioctl(dsp_fd, SNDCTL_DSP_SPEED, &rate); + if (ret == -1) { + g_printerr ("Failed to set rate\n"); + close(dsp_fd); + return; + } + + ret = ioctl(dsp_fd, SNDCTL_DSP_GETBLKSIZE, &fragsize); + if (ret == -1) { + g_printerr ("Failed to get fragment size\n"); + close(dsp_fd); + return; + } + + stream = g_new0 (Stream, 1); + stream->sound = sound; + stream->audio = g_object_ref (audio); + stream->dsp_fd = dsp_fd; + stream->fragsize = fragsize; + sound->streams = g_list_prepend (sound->streams, stream); + + channel = g_io_channel_unix_new (stream->dsp_fd); + stream->source = g_io_create_watch (channel, G_IO_OUT); + g_source_set_priority (stream->source, G_PRIORITY_HIGH); + g_source_set_callback (stream->source, (GSourceFunc) handle_stream, stream, + NULL); + g_io_channel_unref (channel); + g_source_attach (stream->source, stream->sound->context); + + return; +} + +static void +swfdec_playback_stream_close (Stream *stream) +{ + close (stream->dsp_fd); + g_source_destroy (stream->source); + g_source_unref (stream->source); + stream->sound->streams = g_list_remove (stream->sound->streams, stream); + g_object_unref (stream->audio); + g_free (stream); +} + +/*** SOUND ***/ + +static void +advance_before (SwfdecPlayer *player, guint msecs, guint audio_samples, gpointer data) +{ + SwfdecPlayback *sound = data; + GList *walk; + + for (walk = sound->streams; walk; walk = walk->next) { + Stream *stream = walk->data; + if (audio_samples >= stream->offset) { + stream->offset = 0; + } else { + stream->offset -= audio_samples; + } + } +} + +static void +audio_added (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound) +{ + swfdec_playback_stream_open (sound, audio); +} + +static void +audio_removed (SwfdecPlayer *player, SwfdecAudio *audio, SwfdecPlayback *sound) +{ + GList *walk; + + for (walk = sound->streams; walk; walk = walk->next) { + Stream *stream = walk->data; + if (stream->audio == audio) { + swfdec_playback_stream_close (stream); + return; + } + } + g_assert_not_reached (); +} + +SwfdecPlayback * +swfdec_playback_open (SwfdecPlayer *player, GMainContext *context) +{ + SwfdecPlayback *sound; + const GList *walk; + + g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL); + g_return_val_if_fail (context != NULL, NULL); + + sound = g_new0 (SwfdecPlayback, 1); + sound->player = player; + g_signal_connect (player, "advance", G_CALLBACK (advance_before), sound); + g_signal_connect (player, "audio-added", G_CALLBACK (audio_added), sound); + g_signal_connect (player, "audio-removed", G_CALLBACK (audio_removed), sound); + for (walk = swfdec_player_get_audio (player); walk; walk = walk->next) { + swfdec_playback_stream_open (sound, walk->data); + } + g_main_context_ref (context); + sound->context = context; + return sound; +} + +void +swfdec_playback_close (SwfdecPlayback *sound) +{ +#define REMOVE_HANDLER_FULL(obj,func,data,count) G_STMT_START {\ + if (g_signal_handlers_disconnect_by_func ((obj), \ + G_CALLBACK (func), (data)) != (count)) { \ + g_assert_not_reached (); \ + } \ +} G_STMT_END +#define REMOVE_HANDLER(obj,func,data) REMOVE_HANDLER_FULL (obj, func, data, 1) + + while (sound->streams) + swfdec_playback_stream_close (sound->streams->data); + REMOVE_HANDLER (sound->player, advance_before, sound); + REMOVE_HANDLER (sound->player, audio_added, sound); + REMOVE_HANDLER (sound->player, audio_removed, sound); + g_main_context_unref (sound->context); + g_free (sound); +} + + diff --git a/graphics/swfdec/pkg-plist b/graphics/swfdec/pkg-plist index 4bece92d530e..9ae5e8ecc4b7 100644 --- a/graphics/swfdec/pkg-plist +++ b/graphics/swfdec/pkg-plist @@ -18,30 +18,32 @@ include/swfdec-%%VERSION%%/swfdec/swfdec_audio.h include/swfdec-%%VERSION%%/swfdec/swfdec_buffer.h include/swfdec-%%VERSION%%/swfdec/swfdec_enums.h include/swfdec-%%VERSION%%/swfdec/swfdec_file_loader.h +include/swfdec-%%VERSION%%/swfdec/swfdec_gc_object.h include/swfdec-%%VERSION%%/swfdec/swfdec_keys.h include/swfdec-%%VERSION%%/swfdec/swfdec_loader.h include/swfdec-%%VERSION%%/swfdec/swfdec_player.h include/swfdec-%%VERSION%%/swfdec/swfdec_player_scripting.h include/swfdec-%%VERSION%%/swfdec/swfdec_rectangle.h +include/swfdec-%%VERSION%%/swfdec/swfdec_renderer.h include/swfdec-%%VERSION%%/swfdec/swfdec_script.h include/swfdec-%%VERSION%%/swfdec/swfdec_socket.h include/swfdec-%%VERSION%%/swfdec/swfdec_stream.h include/swfdec-%%VERSION%%/swfdec/swfdec_system.h include/swfdec-%%VERSION%%/swfdec/swfdec_url.h +include/swfdec-%%VERSION%%/swfdec/swfdec_version.h lib/libswfdec-%%VERSION%%.a lib/libswfdec-%%VERSION%%.la lib/libswfdec-%%VERSION%%.so -lib/libswfdec-%%VERSION%%.so.90 +lib/libswfdec-%%VERSION%%.so.0 lib/libswfdec-gtk-%%VERSION%%.a lib/libswfdec-gtk-%%VERSION%%.la lib/libswfdec-gtk-%%VERSION%%.so -lib/libswfdec-gtk-%%VERSION%%.so.90 +lib/libswfdec-gtk-%%VERSION%%.so.0 libdata/pkgconfig/swfdec-%%VERSION%%.pc libdata/pkgconfig/swfdec-gtk-%%VERSION%%.pc share/gtk-doc/html/swfdec/SwfdecAsArray.html share/gtk-doc/html/swfdec/SwfdecAsContext.html share/gtk-doc/html/swfdec/SwfdecAsDebugger.html -share/gtk-doc/html/swfdec/SwfdecAsFrame.html share/gtk-doc/html/swfdec/SwfdecAsFunction.html share/gtk-doc/html/swfdec/SwfdecAsObject.html share/gtk-doc/html/swfdec/SwfdecAudio.html @@ -50,6 +52,7 @@ share/gtk-doc/html/swfdec/SwfdecGtkWidget.html share/gtk-doc/html/swfdec/SwfdecLoader.html share/gtk-doc/html/swfdec/SwfdecPlayer.html share/gtk-doc/html/swfdec/SwfdecPlayerScripting.html +share/gtk-doc/html/swfdec/SwfdecRenderer.html share/gtk-doc/html/swfdec/SwfdecSocket.html share/gtk-doc/html/swfdec/SwfdecStream.html share/gtk-doc/html/swfdec/SwfdecSystem.html @@ -60,25 +63,22 @@ share/gtk-doc/html/swfdec/ch04.html share/gtk-doc/html/swfdec/home.png share/gtk-doc/html/swfdec/index.html share/gtk-doc/html/swfdec/index.sgml +share/gtk-doc/html/swfdec/ix01.html share/gtk-doc/html/swfdec/left.png share/gtk-doc/html/swfdec/right.png share/gtk-doc/html/swfdec/style.css share/gtk-doc/html/swfdec/swfdec-Enumerations-and-Types.html share/gtk-doc/html/swfdec/swfdec-Gtk-extension-objects.html share/gtk-doc/html/swfdec/swfdec-Internals.html +share/gtk-doc/html/swfdec/swfdec-SwfdecAsFrame.html share/gtk-doc/html/swfdec/swfdec-SwfdecAsValue.html share/gtk-doc/html/swfdec/swfdec-SwfdecBuffer.html share/gtk-doc/html/swfdec/swfdec-SwfdecRectangle.html share/gtk-doc/html/swfdec/swfdec-SwfdecURL.html +share/gtk-doc/html/swfdec/swfdec-Version-Information.html share/gtk-doc/html/swfdec/swfdec.devhelp share/gtk-doc/html/swfdec/swfdec.devhelp2 share/gtk-doc/html/swfdec/up.png -share/icons/hicolor/16x16/apps/swfdec.png -share/icons/hicolor/22x22/apps/swfdec.png -share/icons/hicolor/24x24/apps/swfdec.png -share/icons/hicolor/32x32/apps/swfdec.png -share/icons/hicolor/48x48/apps/swfdec.png -share/icons/hicolor/scalable/apps/swfdec.svg @dirrm share/gtk-doc/html/swfdec @dirrm include/swfdec-%%VERSION%%/swfdec-gtk @dirrm include/swfdec-%%VERSION%%/swfdec |