banshee r4409 - in trunk/banshee: . libbanshee src/Backends/Banshee.GStreamer/Banshee.GStreamer src/Core/Banshee.Services src/Core/Banshee.Services/Banshee.MediaEngine
- From: abock svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r4409 - in trunk/banshee: . libbanshee src/Backends/Banshee.GStreamer/Banshee.GStreamer src/Core/Banshee.Services src/Core/Banshee.Services/Banshee.MediaEngine
- Date: Wed, 20 Aug 2008 19:28:11 +0000 (UTC)
Author: abock
Date: Wed Aug 20 19:28:11 2008
New Revision: 4409
URL: http://svn.gnome.org/viewvc/banshee?rev=4409&view=rev
Log:
2008-08-20 Aaron Bockover <abock gnome org>
Committed a revised/reorganized version of Chris Howie's <cdhowie gmail com>
visualization support patch (BGO #529479); this does not actually implement
visualization, but adds support for extensions to do so by harvesting
spectrum data that is now readily available.
* src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs:
* src/Core/Banshee.Services/Banshee.MediaEngine/VisualizationDataCallback.cs:
Add interface for PlayerEngines that can provide data for visualizations.
* src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs:
Implement IVisualizationDataSource, binding the unmanaged visualization
support from libbanshee's BansheePlayer
* libbanshee/banshee-player-vis.c
* libbanshee/banshee-player-vis.h: Unmanaged support for gathering
visualization data on the pipeline using the spectrum element
* libbanshee/banshee-player-pipeline.c:
* libbanshee/banshee-player-private.h: Integrate new vis code into the
pipeline and player object
Added:
trunk/banshee/libbanshee/banshee-player-vis.c
trunk/banshee/libbanshee/banshee-player-vis.h
trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs
Modified:
trunk/banshee/ChangeLog
trunk/banshee/libbanshee/Makefile.am
trunk/banshee/libbanshee/banshee-player-pipeline.c
trunk/banshee/libbanshee/banshee-player-private.h
trunk/banshee/libbanshee/libbanshee.mdp
trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp
trunk/banshee/src/Core/Banshee.Services/Makefile.am
Modified: trunk/banshee/libbanshee/Makefile.am
==============================================================================
--- trunk/banshee/libbanshee/Makefile.am (original)
+++ trunk/banshee/libbanshee/Makefile.am Wed Aug 20 19:28:11 2008
@@ -19,6 +19,7 @@
banshee-player-pipeline.c \
banshee-player-replaygain.c \
banshee-player-video.c \
+ banshee-player-vis.c \
banshee-ripper.c \
banshee-tagger.c \
banshee-transcoder.c
@@ -32,6 +33,7 @@
banshee-player-private.h \
banshee-player-replaygain.h \
banshee-player-video.h \
+ banshee-player-vis.h \
banshee-tagger.h
libbanshee_la_LIBADD = \
Modified: trunk/banshee/libbanshee/banshee-player-pipeline.c
==============================================================================
--- trunk/banshee/libbanshee/banshee-player-pipeline.c (original)
+++ trunk/banshee/libbanshee/banshee-player-pipeline.c Wed Aug 20 19:28:11 2008
@@ -32,6 +32,7 @@
#include "banshee-player-equalizer.h"
#include "banshee-player-missing-elements.h"
#include "banshee-player-replaygain.h"
+#include "banshee-player-vis.h"
// ---------------------------------------------------------------------------
// Private Functions
@@ -161,6 +162,7 @@
case GST_MESSAGE_ELEMENT: {
_bp_missing_elements_process_message (player, message);
+ _bp_vis_process_message (player, message);
break;
}
@@ -259,6 +261,8 @@
gst_element_link (audiosinkqueue, audiosink);
}
+ _bp_vis_pipeline_setup (player);
+
// Now that our internal audio sink is constructed, tell playbin to use it
g_object_set (G_OBJECT (player->playbin), "audio-sink", player->audiobin, NULL);
@@ -288,5 +292,7 @@
gst_object_unref (GST_OBJECT (player->playbin));
}
+ _bp_vis_pipeline_destroy (player);
+
player->playbin = NULL;
}
Modified: trunk/banshee/libbanshee/banshee-player-private.h
==============================================================================
--- trunk/banshee/libbanshee/banshee-player-private.h (original)
+++ trunk/banshee/libbanshee/banshee-player-private.h Wed Aug 20 19:28:11 2008
@@ -35,6 +35,7 @@
#include <string.h>
#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
#include <gdk/gdk.h>
#ifdef HAVE_GST_PBUTILS
@@ -64,9 +65,9 @@
typedef void (* BansheePlayerIterateCallback) (BansheePlayer *player);
typedef void (* BansheePlayerBufferingCallback) (BansheePlayer *player, gint buffering_progress);
typedef void (* BansheePlayerTagFoundCallback) (BansheePlayer *player, const gchar *tag, const GValue *value);
+typedef void (* BansheePlayerVisDataCallback) (BansheePlayer *player, gint channels, gint samples, gfloat *data, gfloat *spectrum);
struct BansheePlayer {
-
// Player Callbacks
BansheePlayerEosCallback eos_cb;
BansheePlayerErrorCallback error_cb;
@@ -74,6 +75,7 @@
BansheePlayerIterateCallback iterate_cb;
BansheePlayerBufferingCallback buffering_cb;
BansheePlayerTagFoundCallback tag_found_cb;
+ BansheePlayerVisDataCallback vis_data_cb;
// Pipeline Elements
GstElement *playbin;
@@ -97,6 +99,10 @@
GdkWindow *video_window;
#endif
+ // Visualization State
+ GstAdapter *vis_buffer;
+ gfloat *spectrum_buffer;
+
// Plugin Installer State
GdkWindow *window;
GSList *missing_element_details;
Added: trunk/banshee/libbanshee/banshee-player-vis.c
==============================================================================
--- (empty file)
+++ trunk/banshee/libbanshee/banshee-player-vis.c Wed Aug 20 19:28:11 2008
@@ -0,0 +1,181 @@
+//
+// banshee-player-vis.c
+//
+// Author:
+// Chris Howie <cdhowie gmail com>
+//
+// Copyright (C) 2008 Chris Howie
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#include "banshee-player-vis.h"
+
+#define SPECTRUM_SIZE 512
+
+static GstStaticCaps vis_data_sink_caps = GST_STATIC_CAPS (
+ "audio/x-raw-float, "
+ "rate = (int) 30720, "
+ "channels = (int) 2, "
+ "endianness = (int) BYTE_ORDER, "
+ "width = (int) 32"
+);
+
+// ---------------------------------------------------------------------------
+// Private Functions
+// ---------------------------------------------------------------------------
+
+static void
+bp_vis_pcm_handoff (GstElement *sink, GstBuffer *buffer, GstPad *pad, gpointer userdata)
+{
+ BansheePlayer *player = (BansheePlayer*)userdata;
+ GstStructure *structure;
+ gint channels, wanted_size;
+ gfloat *data;
+
+ g_return_if_fail (IS_BANSHEE_PLAYER (player));
+
+ if (player->vis_data_cb == NULL) {
+ return;
+ }
+
+ structure = gst_caps_get_structure (gst_buffer_get_caps (buffer), 0);
+ gst_structure_get_int (structure, "channels", &channels);
+
+ wanted_size = channels * SPECTRUM_SIZE * sizeof (gfloat);
+
+ gst_adapter_push (player->vis_buffer, gst_buffer_copy (buffer));
+
+ while ((data = (gfloat *)gst_adapter_peek (player->vis_buffer, wanted_size)) != NULL) {
+ gfloat *deinterlaced = g_malloc (wanted_size);
+ gint i, j;
+
+ for (i = 0; i < SPECTRUM_SIZE; i++) {
+ for (j = 0; j < channels; j++) {
+ deinterlaced[j * SPECTRUM_SIZE + i] = data[i * channels + j];
+ }
+ }
+
+ player->vis_data_cb (player, channels, SPECTRUM_SIZE, deinterlaced, player->spectrum_buffer);
+
+ g_free (deinterlaced);
+ gst_adapter_flush (player->vis_buffer, wanted_size);
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Internal Functions
+// ---------------------------------------------------------------------------
+
+void
+_bp_vis_process_message (BansheePlayer *player, GstMessage *message)
+{
+ const GstStructure *st;
+ const GValue *spec;
+ gint i;
+
+ g_return_if_fail (IS_BANSHEE_PLAYER (player));
+
+ st = gst_message_get_structure (message);
+ if (strcmp (gst_structure_get_name (st), "spectrum") != 0) {
+ return;
+ }
+
+ spec = gst_structure_get_value (st, "magnitude");
+
+ for (i = 0; i < SPECTRUM_SIZE; i++) {
+ // v is in the range -60 to 0. Move this up to 0 to 1.
+ gfloat v = g_value_get_float (gst_value_list_get_value (spec, i));
+ player->spectrum_buffer[i] = (v + 60.0f) / 60.0f;
+ }
+}
+
+void
+_bp_vis_pipeline_setup (BansheePlayer *player)
+{
+ GstElement *fakesink, *converter, *resampler, *audiosinkqueue, *spectrum;
+ GstCaps *caps;
+ GstPad *pad;
+
+ player->vis_buffer = NULL;
+ player->spectrum_buffer = NULL;
+
+ // Privided by gst-plugins-good
+ spectrum = gst_element_factory_make ("spectrum", "vis-spectrum");
+ if (spectrum == NULL) {
+ bp_debug ("Could not create the spectrum element. Visualization will be disabled.");
+ return;
+ }
+
+ g_object_set (G_OBJECT (spectrum), "bands", SPECTRUM_SIZE, "interval", GST_SECOND / 60, NULL);
+
+ // Core elements, if something fails here, it's the end of the world
+ audiosinkqueue = gst_element_factory_make ("queue", "vis-queue");
+ resampler = gst_element_factory_make ("audioresample", "vis-resample");
+ converter = gst_element_factory_make ("audioconvert", "vis-convert");
+ fakesink = gst_element_factory_make ("fakesink", "vis-sink");
+
+ if (audiosinkqueue == NULL || resampler == NULL || converter == NULL || fakesink == NULL) {
+ bp_debug ("Could not construct visualization pipeline, a fundamental element could not be created");
+ return;
+ }
+
+ g_signal_connect (G_OBJECT (fakesink), "handoff", G_CALLBACK (bp_vis_pcm_handoff), player);
+ g_object_set (G_OBJECT (fakesink), "signal-handoffs", TRUE, "sync", TRUE, NULL);
+
+ gst_bin_add_many (GST_BIN (player->audiobin), audiosinkqueue, resampler, converter, spectrum, fakesink, NULL);
+
+ pad = gst_element_get_static_pad (audiosinkqueue, "sink");
+ gst_pad_link (gst_element_get_request_pad (player->audiotee, "src%d"), pad);
+ gst_object_unref (GST_OBJECT (pad));
+
+ gst_element_link_many (audiosinkqueue, resampler, converter, NULL);
+
+ caps = gst_static_caps_get (&vis_data_sink_caps);
+ gst_element_link_filtered (converter, spectrum, caps);
+ gst_caps_unref (caps);
+
+ gst_element_link (spectrum, fakesink);
+
+ player->vis_buffer = gst_adapter_new ();
+ player->spectrum_buffer = g_new0 (gfloat, SPECTRUM_SIZE);
+}
+
+void
+_bp_vis_pipeline_destroy (BansheePlayer *player)
+{
+ if (player->vis_buffer != NULL) {
+ gst_object_unref (player->vis_buffer);
+ player->vis_buffer = NULL;
+
+ g_free (player->spectrum_buffer);
+ player->spectrum_buffer = NULL;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Public Functions
+// ---------------------------------------------------------------------------
+
+P_INVOKE void
+bp_set_vis_data_callback (BansheePlayer *player, BansheePlayerVisDataCallback cb)
+{
+ SET_CALLBACK (vis_data_cb);
+}
Added: trunk/banshee/libbanshee/banshee-player-vis.h
==============================================================================
--- (empty file)
+++ trunk/banshee/libbanshee/banshee-player-vis.h Wed Aug 20 19:28:11 2008
@@ -0,0 +1,38 @@
+//
+// banshee-player-vis.h
+//
+// Author:
+// Chris Howie <cdhowie gmail com>
+//
+// Copyright (C) 2008 Chris Howie
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#ifndef _BANSHEE_PLAYER_VIS_H
+#define _BANSHEE_PLAYER_VIS_H
+
+#include "banshee-player-private.h"
+
+void _bp_vis_process_message (BansheePlayer *player, GstMessage *message);
+void _bp_vis_pipeline_setup (BansheePlayer *player);
+void _bp_vis_pipeline_destroy (BansheePlayer *player);
+
+#endif /* _BANSHEE_PLAYER_VIS_H */
Modified: trunk/banshee/libbanshee/libbanshee.mdp
==============================================================================
--- trunk/banshee/libbanshee/libbanshee.mdp (original)
+++ trunk/banshee/libbanshee/libbanshee.mdp Wed Aug 20 19:28:11 2008
@@ -28,6 +28,8 @@
<File name="banshee-player-equalizer.h" subtype="Code" buildaction="Nothing" />
<File name="banshee-player-replaygain.c" subtype="Code" buildaction="Compile" />
<File name="banshee-player-replaygain.h" subtype="Code" buildaction="Nothing" />
+ <File name="banshee-player-vis.c" subtype="Code" buildaction="Compile" />
+ <File name="banshee-player-vis.h" subtype="Code" buildaction="Nothing" />
</Contents>
<compiler ctype="GccCompiler" />
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="Makefile.am">
Modified: trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
==============================================================================
--- trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs (original)
+++ trunk/banshee/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs Wed Aug 20 19:28:11 2008
@@ -56,10 +56,11 @@
internal delegate void BansheePlayerStateChangedCallback (IntPtr player, GstState old_state, GstState new_state, GstState pending_state);
internal delegate void BansheePlayerIterateCallback (IntPtr player);
internal delegate void BansheePlayerBufferingCallback (IntPtr player, int buffering_progress);
+ internal delegate void BansheePlayerVisDataCallback (IntPtr player, int channels, int samples, IntPtr data, IntPtr spectrum);
internal delegate void GstTaggerTagFoundCallback (IntPtr player, string tagName, ref GLib.Value value);
- public class PlayerEngine : Banshee.MediaEngine.PlayerEngine, Banshee.MediaEngine.IEqualizer
+ public class PlayerEngine : Banshee.MediaEngine.PlayerEngine, IEqualizer, IVisualizationDataSource
{
private uint GST_CORE_ERROR = 0;
private uint GST_LIBRARY_ERROR = 0;
@@ -73,12 +74,38 @@
private BansheePlayerStateChangedCallback state_changed_callback;
private BansheePlayerIterateCallback iterate_callback;
private BansheePlayerBufferingCallback buffering_callback;
+ private BansheePlayerVisDataCallback vis_data_callback;
private GstTaggerTagFoundCallback tag_found_callback;
private bool buffering_finished;
private int pending_volume = -1;
private bool xid_is_set = false;
+ private event VisualizationDataHandler data_available = null;
+ public event VisualizationDataHandler DataAvailable {
+ add {
+ if (value == null) {
+ return;
+ } else if (data_available == null) {
+ bp_set_vis_data_callback (handle, vis_data_callback);
+ }
+
+ data_available += value;
+ }
+
+ remove {
+ if (value == null) {
+ return;
+ }
+
+ data_available -= value;
+
+ if (data_available == null) {
+ bp_set_vis_data_callback (handle, null);
+ }
+ }
+ }
+
public PlayerEngine ()
{
if (ServiceManager.IsInitialized) {
@@ -114,6 +141,7 @@
state_changed_callback = new BansheePlayerStateChangedCallback (OnStateChange);
iterate_callback = new BansheePlayerIterateCallback (OnIterate);
buffering_callback = new BansheePlayerBufferingCallback (OnBuffering);
+ vis_data_callback = new BansheePlayerVisDataCallback (OnVisualizationData);
tag_found_callback = new GstTaggerTagFoundCallback (OnTagFound);
bp_set_eos_callback (handle, eos_callback);
@@ -293,7 +321,35 @@
{
OnTagFound (ProcessNativeTagResult (tagName, ref value));
}
+
+ private void OnVisualizationData (IntPtr player, int channels, int samples, IntPtr data, IntPtr spectrum)
+ {
+ VisualizationDataHandler handler = data_available;
+
+ if (handler == null) {
+ return;
+ }
+
+ float [] flat = new float[channels * samples];
+ Marshal.Copy (data, flat, 0, flat.Length);
+
+ float [][] cbd = new float[channels][];
+ for (int i = 0; i < channels; i++) {
+ float [] channel = new float[samples];
+ Array.Copy (flat, i * samples, channel, 0, samples);
+ cbd[i] = channel;
+ }
+ float [] spec = new float[512];
+ Marshal.Copy (spectrum, spec, 0, 512);
+
+ try {
+ handler (cbd, new float[][] { spec });
+ } catch (Exception e) {
+ Log.Exception ("Uncaught exception during visualization data post.", e);
+ }
+ }
+
private static StreamTag ProcessNativeTagResult (string tagName, ref GLib.Value valueRaw)
{
if (tagName == String.Empty || tagName == null) {
@@ -487,6 +543,9 @@
private static extern void bp_set_error_callback (HandleRef player, BansheePlayerErrorCallback cb);
[DllImport ("libbanshee")]
+ private static extern void bp_set_vis_data_callback (HandleRef player, BansheePlayerVisDataCallback cb);
+
+ [DllImport ("libbanshee")]
private static extern void bp_set_state_changed_callback (HandleRef player,
BansheePlayerStateChangedCallback cb);
Added: trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/IVisualizationDataSource.cs Wed Aug 20 19:28:11 2008
@@ -0,0 +1,38 @@
+// IVisualizationDataSource.cs
+//
+// Author:
+// Chris Howie <cdhowie gmail com>
+//
+// Copyright (C) 2008 Chris Howie
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Banshee.MediaEngine
+{
+ public delegate void VisualizationDataHandler (float [][] pcm, float [][] spectrum);
+
+ public interface IVisualizationDataSource
+ {
+ event VisualizationDataHandler DataAvailable;
+ }
+}
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp Wed Aug 20 19:28:11 2008
@@ -1,4 +1,4 @@
-<Project name="Banshee.Services" fileversion="2.0" language="C#" clr-version="Net_2_0" UseParentDirectoryAsNamespace="True" ctype="DotNetProject">
+<Project name="Banshee.Services" fileversion="2.0" language="C#" UseParentDirectoryAsNamespace="True" clr-version="Net_2_0" ctype="DotNetProject">
<Configurations active="Debug">
<Configuration name="Debug" ctype="DotNetProjectConfiguration">
<Output directory="../../../bin" assembly="Banshee.Services" />
@@ -182,6 +182,8 @@
<File name="Banshee.Collection.Database/FilterModelProvider.cs" subtype="Code" buildaction="Compile" />
<File name="Banshee.Collection.Database/QueryFilterInfo.cs" subtype="Code" buildaction="Compile" />
<File name="Banshee.Sources/IFilterableSource.cs" subtype="Code" buildaction="Compile" />
+ <File name="Banshee.MediaEngine/IVisualizationDataSource.cs" subtype="Code" buildaction="Compile" />
+ <File name="Banshee.Collection/MoveOnInfoSaveJob.cs" subtype="Code" buildaction="Compile" />
</Contents>
<References>
<ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
@@ -200,6 +202,7 @@
<ProjectReference type="Project" localcopy="False" refto="Lastfm" />
</References>
<Deployment.LinuxDeployData generateScript="False" />
+ <GtkDesignInfo gtkVersion="2.12.1" />
<MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="Makefile.am">
<BuildFilesVar Sync="True" Name="SOURCES" />
<DeployFilesVar />
@@ -209,4 +212,4 @@
<AsmRefVar />
<ProjectRefVar />
</MonoDevelop.Autotools.MakefileInfo>
-</Project>
+</Project>
\ No newline at end of file
Modified: trunk/banshee/src/Core/Banshee.Services/Makefile.am
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Makefile.am (original)
+++ trunk/banshee/src/Core/Banshee.Services/Makefile.am Wed Aug 20 19:28:11 2008
@@ -68,6 +68,7 @@
Banshee.MediaEngine/IEqualizer.cs \
Banshee.MediaEngine/IPlayerEngineService.cs \
Banshee.MediaEngine/ITranscoder.cs \
+ Banshee.MediaEngine/IVisualizationDataSource.cs \
Banshee.MediaEngine/NullPlayerEngine.cs \
Banshee.MediaEngine/PlayerEngine.cs \
Banshee.MediaEngine/PlayerEngineService.cs \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]