Mercurial > audlegacy
annotate Plugins/Output/jack/jack.c @ 325:ea321d1dae48 trunk
[svn] JACKd output plugin via external contractor james@develia.org.
author | nenolod |
---|---|
date | Mon, 19 Dec 2005 08:58:27 -0800 |
parents | |
children | 55dc40ff1aff |
rev | line source |
---|---|
325
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
1 /* xmms - jack output plugin |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
2 * Copyright 2002 Chris Morgan<cmorgan@alum.wpi.edu> |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
3 * |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
4 * audacious port (2005) by Giacomo Lozito from develia.org |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
5 * |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
6 * This code maps xmms calls into the jack translation library |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
7 */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
8 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
9 #include "libaudacious/configfile.h" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
10 #include <dlfcn.h> |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
11 #include <gtk/gtk.h> |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
12 #include <stdio.h> |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
13 #include "config.h" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
14 #include "bio2jack.h" /* includes for the bio2jack library */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
15 #include "jack.h" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
16 #include "xconvert.h" /* xmms rate conversion header file */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
17 #include <string.h> |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
18 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
19 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
20 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
21 /* set to 1 for verbose output */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
22 #define VERBOSE_OUTPUT 0 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
23 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
24 jackconfig jack_cfg; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
25 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
26 #define OUTFILE stderr |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
27 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
28 #define TRACE(...) \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
29 if(jack_cfg.isTraceEnabled) { \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
30 fprintf(OUTFILE, "%s:", __FUNCTION__), \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
31 fprintf(OUTFILE, __VA_ARGS__), \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
32 fflush(OUTFILE); \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
33 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
34 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
35 #define ERR(...) \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
36 if(jack_cfg.isTraceEnabled) { \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
37 fprintf(OUTFILE, "ERR: %s:", __FUNCTION__), \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
38 fprintf(OUTFILE, __VA_ARGS__), \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
39 fflush(OUTFILE); \ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
40 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
41 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
42 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
43 static int driver = 0; /* handle to the jack output device */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
44 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
45 typedef struct format_info { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
46 AFormat format; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
47 long frequency; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
48 int channels; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
49 long bps; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
50 } format_info_t; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
51 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
52 static format_info_t input; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
53 static format_info_t effect; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
54 static format_info_t output; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
55 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
56 static convert_freq_func_t freq_convert; /* rate convert function */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
57 static struct xmms_convert_buffers *convertb; /* convert buffer */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
58 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
59 #define MAKE_FUNCPTR(f) static typeof(f) * fp_##f = NULL; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
60 MAKE_FUNCPTR(xmms_convert_buffers_new); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
61 MAKE_FUNCPTR(xmms_convert_buffers_destroy); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
62 MAKE_FUNCPTR(xmms_convert_get_frequency_func); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
63 void *xmmslibhandle; /* handle to the dlopen'ed libxmms.so */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
64 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
65 static int isXmmsFrequencyAvailable = 0; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
66 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
67 static gboolean output_opened; /* true if we have a connection to jack */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
68 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
69 static GtkWidget *dialog, *button, *label; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
70 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
71 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
72 /* Giacomo's note: removed the destructor from the original xmms-jack, cause |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
73 destructors + thread join + NPTL currently leads to problems; solved this |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
74 by adding a cleanup function callback for output plugins in Audacious, this |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
75 is used to close the JACK connection and to perform a correct shutdown */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
76 void jack_cleanup(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
77 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
78 int errval; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
79 TRACE("cleanup\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
80 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
81 if((errval = JACK_Close(driver))) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
82 ERR("error closing device, errval of %d\n", errval); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
83 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
84 /* only clean this up if we have the function to call */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
85 if(isXmmsFrequencyAvailable) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
86 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
87 fp_xmms_convert_buffers_destroy(convertb); /* clean up the rate conversion buffers */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
88 dlclose(xmmslibhandle); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
89 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
90 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
91 return; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
92 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
93 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
94 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
95 void jack_sample_rate_error(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
96 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
97 dialog = gtk_dialog_new(); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
98 gtk_window_set_title(GTK_WINDOW(dialog), ("Sample rate mismatch")); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
99 gtk_container_border_width(GTK_CONTAINER(dialog), 5); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
100 label = gtk_label_new(( |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
101 "Xmms is asking for a sample rate that differs from\n " |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
102 "that of the jack server. Xmms 1.2.8 or later\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
103 "contains resampling routines that xmms-jack will\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
104 "dynamically load and use to perform resampling.\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
105 "Or you can restart the jack server\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
106 "with a sample rate that matches the one that\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
107 "xmms desires. -r is the option for the jack\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
108 "alsa driver so -r 44100 or -r 48000 should do\n\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
109 "Chris Morgan <cmorgan@alum.wpi.edu>\n")); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
110 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
111 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
112 gtk_widget_show(label); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
113 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
114 button = gtk_button_new_with_label((" Close ")); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
115 gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog)); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
116 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, FALSE, FALSE, 0); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
117 gtk_widget_show(button); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
118 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
119 gtk_widget_show(dialog); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
120 gtk_widget_grab_focus(button); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
121 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
122 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
123 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
124 /* Return the number of milliseconds of audio data that has been */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
125 /* written out to the device */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
126 gint jack_get_written_time(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
127 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
128 long return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
129 return_val = JACK_GetPosition(driver, MILLISECONDS, WRITTEN); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
130 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
131 TRACE("returning %ld milliseconds\n", return_val); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
132 return return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
133 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
134 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
135 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
136 /* Return the current number of milliseconds of audio data that has */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
137 /* been played out of the audio device, not including the buffer */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
138 gint jack_get_output_time(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
139 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
140 gint return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
141 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
142 /* don't try to get any values if the device is still closed */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
143 if(JACK_GetState(driver) == CLOSED) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
144 return_val = 0; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
145 else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
146 return_val = JACK_GetPosition(driver, MILLISECONDS, PLAYED); /* get played position in terms of milliseconds */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
147 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
148 TRACE("returning %d milliseconds\n", return_val); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
149 return return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
150 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
151 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
152 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
153 /* returns TRUE if we are currently playing */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
154 /* NOTE: this was confusing at first BUT, if the device is open and there */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
155 /* is no more audio to be played, then the device is NOT PLAYING */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
156 gint jack_playing(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
157 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
158 gint return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
159 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
160 /* If we are playing see if we ACTUALLY have something to play */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
161 if(JACK_GetState(driver) == PLAYING) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
162 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
163 /* If we have zero bytes stored, we are done playing */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
164 if(JACK_GetBytesStored(driver) == 0) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
165 return_val = FALSE; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
166 else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
167 return_val = TRUE; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
168 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
169 else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
170 return_val = FALSE; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
171 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
172 TRACE("returning %d\n", return_val); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
173 return return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
174 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
175 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
176 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
177 void jack_set_port_connection_mode() |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
178 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
179 /* setup the port connection mode that determines how bio2jack will connect ports */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
180 enum JACK_PORT_CONNECTION_MODE mode; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
181 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
182 if(strcmp(jack_cfg.port_connection_mode, "CONNECT_ALL") == 0) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
183 mode = CONNECT_ALL; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
184 else if(strcmp(jack_cfg.port_connection_mode, "CONNECT_OUTPUT") == 0) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
185 mode = CONNECT_OUTPUT; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
186 else if(strcmp(jack_cfg.port_connection_mode, "CONNECT_NONE") == 0) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
187 mode = CONNECT_NONE; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
188 else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
189 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
190 TRACE("Defaulting to CONNECT_ALL"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
191 mode = CONNECT_ALL; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
192 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
193 JACK_SetPortConnectionMode(mode); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
194 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
195 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
196 /* Initialize necessary things */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
197 void jack_init(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
198 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
199 /* read the isTraceEnabled setting from the config file */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
200 ConfigFile *cfgfile; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
201 gchar *filename; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
202 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
203 filename = g_strconcat(g_get_home_dir(), "/.audacious/config", NULL); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
204 cfgfile = xmms_cfg_open_file(filename); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
205 if (!cfgfile) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
206 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
207 jack_cfg.isTraceEnabled = FALSE; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
208 jack_cfg.port_connection_mode = "CONNECT_ALL"; /* default to connect all */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
209 } else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
210 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
211 xmms_cfg_read_boolean(cfgfile, "jack", "isTraceEnabled", &jack_cfg.isTraceEnabled); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
212 if(!xmms_cfg_read_string(cfgfile, "jack", "port_connection_mode", &jack_cfg.port_connection_mode)) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
213 jack_cfg.port_connection_mode = "CONNECT_ALL"; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
214 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
215 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
216 xmms_cfg_free(cfgfile); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
217 g_free(filename); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
218 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
219 TRACE("initializing\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
220 JACK_Init(); /* initialize the driver */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
221 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
222 /* set the bio2jack name so users will see xmms-jack in their */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
223 /* jack client list */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
224 JACK_SetClientName("audacious-jack"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
225 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
226 /* set the port connection mode */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
227 jack_set_port_connection_mode(); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
228 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
229 xmmslibhandle = dlopen("libaudacious.so", RTLD_NOW); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
230 if(xmmslibhandle) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
231 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
232 fp_xmms_convert_buffers_new = dlsym(xmmslibhandle, "xmms_convert_buffers_new"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
233 fp_xmms_convert_buffers_destroy = dlsym(xmmslibhandle, "xmms_convert_buffers_destroy"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
234 fp_xmms_convert_get_frequency_func = dlsym(xmmslibhandle, "xmms_convert_get_frequency_func"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
235 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
236 if(!fp_xmms_convert_buffers_new) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
237 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
238 TRACE("fp_xmms_convert_buffers_new couldn't be dlsym'ed\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
239 TRACE("dlerror: %s\n", dlerror()); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
240 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
241 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
242 if(!fp_xmms_convert_buffers_destroy) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
243 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
244 TRACE("fp_xmms_convert_buffers_destroy couldn't be dlsym'ed\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
245 TRACE("dlerror: %s\n", dlerror()); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
246 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
247 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
248 if(!fp_xmms_convert_get_frequency_func) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
249 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
250 TRACE("fp_xmms_get_frequency_func couldn't be dlsym'ed\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
251 TRACE("dlerror: %s\n", dlerror()); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
252 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
253 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
254 if(!fp_xmms_convert_buffers_new || !fp_xmms_convert_buffers_destroy || |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
255 !fp_xmms_convert_get_frequency_func) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
256 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
257 dlclose(xmmslibhandle); /* close the library, no need to keep it open */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
258 TRACE("One or more frequency convertion functions are missing, upgrade to xmms >=1.2.8\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
259 } else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
260 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
261 TRACE("Found frequency convertion functions, setting isXmmsFrequencyAvailable to 1\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
262 isXmmsFrequencyAvailable = 1; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
263 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
264 } else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
265 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
266 TRACE("unable to dlopen '%s'\n", "libaudacious.so"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
267 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
268 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
269 /* only initialize this stuff if we have the functions available */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
270 if(isXmmsFrequencyAvailable) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
271 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
272 convertb = fp_xmms_convert_buffers_new (); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
273 freq_convert = fp_xmms_convert_get_frequency_func(FMT_S16_LE, 2); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
274 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
275 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
276 output_opened = FALSE; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
277 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
278 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
279 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
280 /* Return the amount of data that can be written to the device */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
281 gint jack_free(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
282 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
283 unsigned long return_val = JACK_GetBytesFreeSpace(driver); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
284 unsigned long tmp; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
285 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
286 /* adjust for frequency differences, otherwise xmms could send us */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
287 /* as much data as we have free, then we go to convert this to */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
288 /* the output frequency and won't have enough space, so adjust */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
289 /* by the ratio of the two */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
290 if(effect.frequency != output.frequency) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
291 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
292 tmp = return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
293 return_val = (return_val * effect.frequency) / output.frequency; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
294 TRACE("adjusting from %ld to %ld free bytes to compensate for frequency differences\n", tmp, return_val); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
295 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
296 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
297 if(return_val > G_MAXINT) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
298 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
299 TRACE("Warning: return_val > G_MAXINT\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
300 return_val = G_MAXINT; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
301 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
302 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
303 TRACE("free space of %ld bytes\n", return_val); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
304 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
305 return return_val; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
306 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
307 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
308 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
309 /* Close the device */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
310 void jack_close(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
311 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
312 TRACE("\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
313 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
314 JACK_Reset(driver); /* flush buffers, reset position and set state to STOPPED */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
315 TRACE("resetting driver, not closing now, destructor will close for us\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
316 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
317 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
318 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
319 /* Open the device up */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
320 gint jack_open(AFormat fmt, gint sample_rate, gint num_channels) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
321 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
322 int bits_per_sample; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
323 int retval; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
324 unsigned long rate; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
325 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
326 TRACE("fmt == %d, sample_rate == %d, num_channels == %d\n", |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
327 fmt, sample_rate, num_channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
328 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
329 if((fmt == FMT_U8) || (fmt == FMT_S8)) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
330 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
331 bits_per_sample = 8; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
332 } else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
333 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
334 bits_per_sample = 16; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
335 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
336 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
337 /* record some useful information */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
338 input.format = fmt; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
339 input.frequency = sample_rate; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
340 input.bps = bits_per_sample * sample_rate * num_channels; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
341 input.channels = num_channels; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
342 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
343 /* setup the effect as matching the input format */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
344 effect.format = input.format; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
345 effect.frequency = input.frequency; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
346 effect.channels = input.channels; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
347 effect.bps = input.bps; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
348 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
349 /* if we are already opened then don't open again */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
350 if(output_opened) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
351 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
352 /* if something has changed we should close and re-open the connect to jack */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
353 if((output.channels != input.channels) || |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
354 (output.frequency != input.frequency) || |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
355 (output.format != input.format)) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
356 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
357 TRACE("output.channels is %d, jack_open called with %d channels\n", output.channels, input.channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
358 TRACE("output.frequency is %ld, jack_open called with %ld\n", output.frequency, input.frequency); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
359 TRACE("output.format is %d, jack_open called with %d\n", output.format, input.format); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
360 jack_close(); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
361 } else |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
362 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
363 TRACE("output_opened is TRUE and no options changed, not reopening\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
364 return 1; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
365 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
366 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
367 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
368 /* try to open the jack device with the requested rate at first */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
369 output.frequency = input.frequency; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
370 output.bps = input.bps; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
371 output.channels = input.channels; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
372 output.format = input.format; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
373 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
374 rate = output.frequency; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
375 retval = JACK_Open(&driver, bits_per_sample, &rate, output.channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
376 output.frequency = rate; /* avoid compile warning as output.frequency differs in type |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
377 from what JACK_Open() wants for the type of the rate parameter */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
378 if((retval == ERR_RATE_MISMATCH) && isXmmsFrequencyAvailable) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
379 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
380 TRACE("xmms(input) wants rate of '%ld', jacks rate(output) is '%ld', opening at jack rate\n", input.frequency, output.frequency); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
381 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
382 /* open the jack device with true jack's rate, return 0 upon failure */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
383 retval = JACK_Open(&driver, bits_per_sample, &rate, output.channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
384 output.frequency = rate; /* avoid compile warning as output.frequency differs in type |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
385 from what JACK_Open() wants for the type of the rate parameter */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
386 if(retval) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
387 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
388 TRACE("failed to open jack with JACK_Open(), error %d\n", retval); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
389 return 0; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
390 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
391 TRACE("success!!\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
392 } else if((retval == ERR_RATE_MISMATCH) && !isXmmsFrequencyAvailable) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
393 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
394 TRACE("JACK_Open(), sample rate mismatch with no resampling routines available\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
395 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
396 jack_sample_rate_error(); /* notify the user that we can't resample */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
397 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
398 return 0; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
399 } else if(retval != ERR_SUCCESS) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
400 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
401 TRACE("failed to open jack with JACK_Open(), error %d\n", retval); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
402 return 0; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
403 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
404 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
405 output_opened = TRUE; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
406 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
407 return 1; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
408 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
409 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
410 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
411 /* write some audio out to the device */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
412 void jack_write(gpointer ptr, gint length) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
413 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
414 long written; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
415 EffectPlugin *ep; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
416 AFormat new_format; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
417 int new_frequency, new_channels; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
418 long positionMS; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
419 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
420 TRACE("starting length of %d\n", length); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
421 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
422 /* copy the current values into temporary values */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
423 new_format = input.format; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
424 new_frequency = input.frequency; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
425 new_channels = input.channels; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
426 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
427 /* query xmms for the current plugin */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
428 ep = get_current_effect_plugin(); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
429 if(effects_enabled() && ep && ep->query_format) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
430 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
431 ep->query_format(&new_format, &new_frequency, &new_channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
432 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
433 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
434 /* if the format has changed take this into account by modifying */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
435 /* the time offset and reopening the device with the new format settings */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
436 if (new_format != effect.format || |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
437 new_frequency != effect.frequency || |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
438 new_channels != effect.channels) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
439 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
440 TRACE("format changed, storing new values and opening/closing jack\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
441 TRACE("effect.format == %d, new_format == %d, effect.frequency == %ld, new_frequency == %d, effect.channels == %d, new_channels = %d\n", |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
442 effect.format, new_format, effect.frequency, new_frequency, effect.channels, new_channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
443 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
444 positionMS = JACK_GetPosition(driver, MILLISECONDS, PLAYED); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
445 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
446 jack_close(); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
447 jack_open(new_format, new_frequency, new_channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
448 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
449 /* restore the position after the open and close */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
450 JACK_SetState(driver, PAUSED); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
451 JACK_SetPosition(driver, MILLISECONDS, positionMS); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
452 JACK_SetState(driver, PLAYING); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
453 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
454 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
455 /* if effects are enabled and we have a plugin, run the current */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
456 /* samples through the plugin */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
457 if (effects_enabled() && ep && ep->mod_samples) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
458 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
459 length = ep->mod_samples(&ptr, length, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
460 input.format, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
461 input.frequency, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
462 input.channels); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
463 TRACE("effects_enabled(), length is now %d\n", length); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
464 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
465 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
466 TRACE("effect.frequency == %ld, input.frequency == %ld, output.frequency == %ld\n", |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
467 effect.frequency, input.frequency, output.frequency); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
468 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
469 /* if we need rate conversion, perform it here */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
470 if((effect.frequency != output.frequency) && isXmmsFrequencyAvailable) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
471 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
472 TRACE("performing rate conversion from '%ld'(effect) to '%ld'(output)\n", effect.frequency, output.frequency); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
473 length = freq_convert (convertb, &ptr, length, effect.frequency, output.frequency); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
474 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
475 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
476 TRACE("length = %d\n", length); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
477 /* loop until we have written all the data out to the jack device */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
478 /* this is due to xmms' audio driver api */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
479 char *buf = (char*)ptr; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
480 while(length > 0) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
481 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
482 TRACE("writing %d bytes\n", length); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
483 written = JACK_Write(driver, (unsigned char*)buf, length); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
484 length-=written; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
485 buf+=written; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
486 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
487 TRACE("finished\n"); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
488 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
489 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
490 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
491 /* Flush any output currently buffered */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
492 /* and set the number of bytes written based on ms_offset_time, */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
493 /* the number of milliseconds of offset passed in */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
494 /* This is done so the driver itself keeps track of */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
495 /* current playing position of the mp3 */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
496 void jack_flush(gint ms_offset_time) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
497 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
498 TRACE("setting values for ms_offset_time of %d\n", ms_offset_time); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
499 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
500 JACK_Reset(driver); /* flush buffers and set state to STOPPED */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
501 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
502 /* update the internal driver values to correspond to the input time given */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
503 JACK_SetPosition(driver, MILLISECONDS, ms_offset_time); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
504 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
505 JACK_SetState(driver, PLAYING); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
506 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
507 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
508 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
509 /* Pause the jack device */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
510 void jack_pause(short p) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
511 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
512 TRACE("p == %d\n", p); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
513 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
514 /* pause the device if p is non-zero, unpause the device if p is zero and */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
515 /* we are currently paused */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
516 if(p) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
517 JACK_SetState(driver, PAUSED); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
518 else if(JACK_GetState(driver) == PAUSED) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
519 JACK_SetState(driver, PLAYING); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
520 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
521 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
522 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
523 /* Set the volume */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
524 void jack_set_volume(int l, int r) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
525 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
526 if(output.channels == 1) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
527 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
528 TRACE("l(%d)\n", l); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
529 } else if(output.channels > 1) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
530 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
531 TRACE("l(%d), r(%d)\n", l, r); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
532 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
533 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
534 if(output.channels > 0) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
535 JACK_SetVolumeForChannel(driver, 0, l); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
536 if(output.channels > 1) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
537 JACK_SetVolumeForChannel(driver, 1, r); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
538 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
539 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
540 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
541 /* Get the current volume setting */ |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
542 void jack_get_volume(int *l, int *r) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
543 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
544 unsigned int _l, _r; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
545 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
546 if(output.channels > 0) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
547 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
548 JACK_GetVolumeForChannel(driver, 0, &_l); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
549 (*l) = _l; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
550 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
551 if(output.channels > 1) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
552 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
553 JACK_GetVolumeForChannel(driver, 1, &_r); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
554 (*r) = _r; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
555 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
556 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
557 #if VERBOSE_OUTPUT |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
558 if(output.channels == 1) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
559 TRACE("l(%d)\n", *l); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
560 else if(output.channels > 1) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
561 TRACE("l(%d), r(%d)\n", *l, *r); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
562 #endif |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
563 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
564 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
565 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
566 void jack_about(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
567 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
568 dialog = gtk_dialog_new(); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
569 gtk_window_set_title(GTK_WINDOW(dialog), ("About JACK Output Plugin 0.15")); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
570 gtk_container_border_width(GTK_CONTAINER(dialog), 5); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
571 label = gtk_label_new(( |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
572 "XMMS jack Driver 0.15\n\n " |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
573 "xmms-jack.sf.net\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
574 "Chris Morgan<cmorgan@alum.wpi.edu>\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
575 "\nAudacious port by\n" |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
576 "Giacomo Lozito from develia.org\n")); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
577 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
578 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
579 gtk_widget_show(label); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
580 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
581 button = gtk_button_new_with_label((" Close ")); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
582 gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog)); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
583 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, FALSE, FALSE, 0); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
584 gtk_widget_show(button); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
585 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
586 gtk_widget_show(dialog); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
587 gtk_widget_grab_focus(button); |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
588 } |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
589 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
590 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
591 OutputPlugin jack_op = |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
592 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
593 NULL, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
594 NULL, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
595 "JACK Output Plugin 0.15", |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
596 jack_init, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
597 jack_cleanup, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
598 jack_about, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
599 jack_configure, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
600 jack_get_volume, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
601 jack_set_volume, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
602 jack_open, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
603 jack_write, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
604 jack_close, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
605 jack_flush, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
606 jack_pause, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
607 jack_free, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
608 jack_playing, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
609 jack_get_output_time, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
610 jack_get_written_time, |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
611 }; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
612 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
613 |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
614 OutputPlugin *get_oplugin_info(void) |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
615 { |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
616 return &jack_op; |
ea321d1dae48
[svn] JACKd output plugin via external contractor james@develia.org.
nenolod
parents:
diff
changeset
|
617 } |