Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "xmmspriv/xmms_xform.h"
00023 #include "xmmspriv/xmms_output.h"
00024 #include "xmmspriv/xmms_visualization.h"
00025 #include "xmms/xmms_log.h"
00026
00027 #include <glib.h>
00028 #include <stdio.h>
00029 #include <limits.h>
00030
00031 #include "common.h"
00032
00033 static gboolean xmms_vis_init (xmms_xform_t *xform);
00034 static void xmms_vis_destroy (xmms_xform_t *xform);
00035 static gint xmms_vis_read (xmms_xform_t *xform, xmms_sample_t *buf, gint len,
00036 xmms_error_t *error);
00037 static gint64 xmms_vis_seek (xmms_xform_t *xform, gint64 offset,
00038 xmms_xform_seek_mode_t whence, xmms_error_t *err);
00039
00040 static gboolean
00041 xmms_vis_plugin_setup (xmms_xform_plugin_t *xform_plugin)
00042 {
00043 xmms_xform_methods_t methods;
00044
00045 XMMS_XFORM_METHODS_INIT (methods);
00046
00047 methods.init = xmms_vis_init;
00048 methods.destroy = xmms_vis_destroy;
00049 methods.read = xmms_vis_read;
00050 methods.seek = xmms_vis_seek;
00051
00052 xmms_xform_plugin_methods_set (xform_plugin, &methods);
00053
00054 xmms_xform_plugin_indata_add (xform_plugin,
00055 XMMS_STREAM_TYPE_MIMETYPE,
00056 "audio/pcm",
00057 XMMS_STREAM_TYPE_FMT_FORMAT,
00058 XMMS_SAMPLE_FORMAT_S16,
00059 XMMS_STREAM_TYPE_FMT_SAMPLERATE,
00060 44100,
00061 XMMS_STREAM_TYPE_END);
00062
00063 return TRUE;
00064 }
00065
00066
00067 static gboolean
00068 xmms_vis_init (xmms_xform_t *xform)
00069 {
00070 gint srate;
00071
00072 g_return_val_if_fail (xform, FALSE);
00073
00074 srate = xmms_xform_indata_get_int (xform, XMMS_STREAM_TYPE_FMT_SAMPLERATE);
00075
00076
00077 xmms_xform_outdata_type_copy (xform);
00078
00079 XMMS_DBG ("Visualization hook initialized successfully!");
00080
00081 return TRUE;
00082 }
00083
00084 static void
00085 xmms_vis_destroy (xmms_xform_t *xform)
00086 {
00087 g_return_if_fail (xform);
00088 }
00089
00090 static gint
00091 xmms_vis_read (xmms_xform_t *xform, xmms_sample_t *buf, gint len,
00092 xmms_error_t *error)
00093 {
00094 gint read, chan;
00095
00096 g_return_val_if_fail (xform, -1);
00097
00098 chan = xmms_xform_indata_get_int (xform, XMMS_STREAM_TYPE_FMT_CHANNELS);
00099
00100
00101 if (len > XMMSC_VISUALIZATION_WINDOW_SIZE * chan * sizeof (short)) {
00102 len = XMMSC_VISUALIZATION_WINDOW_SIZE * chan * sizeof (short);
00103 }
00104
00105 read = xmms_xform_read (xform, buf, len, error);
00106 if (read > 0) {
00107 send_data (chan, read / sizeof (short), buf);
00108 }
00109
00110 return read;
00111 }
00112
00113 static gint64
00114 xmms_vis_seek (xmms_xform_t *xform, gint64 offset, xmms_xform_seek_mode_t whence, xmms_error_t *err)
00115 {
00116 return xmms_xform_seek (xform, offset, whence, err);
00117 }
00118
00119
00120 XMMS_XFORM_BUILTIN (visualization,
00121 "visualization hook",
00122 XMMS_VERSION,
00123 "visualization hook",
00124 xmms_vis_plugin_setup);
00125
00126