]> git.tue.mpg.de Git - paraslash.git/commitdiff
split afs.h
authorAndre <maan@p133.(none)>
Wed, 17 May 2006 19:38:52 +0000 (21:38 +0200)
committerAndre <maan@p133.(none)>
Wed, 17 May 2006 19:38:52 +0000 (21:38 +0200)
move the audio format handler stuff to the new afh.h header file
which isn't included by any of the senders.

aac_afh.c
afh.h [new file with mode: 0644]
afs.c
afs.h
command.c
mp3.c
ogg.c
server.c

index 1f3ea6b3040dd9eafe52839a79931b9398c235f7..fdb37a7e0f3d8c89ac1ee6992aad2cfeb920f763 100644 (file)
--- a/aac_afh.c
+++ b/aac_afh.c
@@ -25,6 +25,7 @@
 #include "server.cmdline.h"
 #include "server.h"
 #include "afs.h"
+#include "afh.h"
 #include "error.h"
 #include "string.h"
 #include "aac.h"
diff --git a/afh.h b/afh.h
new file mode 100644 (file)
index 0000000..403b7a5
--- /dev/null
+++ b/afh.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2005-2006 Andre Noll <maan@systemlinux.org>
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ */
+
+/** \file afh.h structures for audio format handling (para_server) */
+
+/** \cond */
+#ifdef HAVE_OGGVORBIS
+#define OV_AUDIO_FORMAT " ogg"
+#define OV_AUDIO_FORMAT_ARRAY , "ogg"
+#else
+#define OV_AUDIO_FORMAT ""
+#define OV_AUDIO_FORMAT_ARRAY
+#endif
+
+#ifdef HAVE_FAAD
+#define AAC_AUDIO_FORMAT " aac"
+#define AAC_AUDIO_FORMAT_ARRAY , "aac"
+#else
+#define AAC_AUDIO_FORMAT ""
+#define AAC_AUDIO_FORMAT_ARRAY
+#endif
+
+#define SUPPORTED_AUDIO_FORMATS "mp3" OV_AUDIO_FORMAT AAC_AUDIO_FORMAT
+#define SUPPORTED_AUDIO_FORMATS_ARRAY "mp3" OV_AUDIO_FORMAT_ARRAY \
+       AAC_AUDIO_FORMAT_ARRAY, NULL
+
+/** \endcond */
+
+/**
+ * structure for audio format handling
+ *
+ * There's exactly one such struct for each supported audio format. Initially,
+ * only \a name and \a init are defined. During the startup process,
+ * para_server calls the \a init function of each audio format handler which is
+ * expected to fill in all the other function pointers.
+ */
+struct audio_format_handler {
+       /**
+        * name of the audio format
+        */
+       const char *name;
+       /**
+        * typical file endings for files that can be handled by this afh.
+        */
+       const char **suffixes;
+       /**
+        * pointer to the audio format handler's init function
+        *
+        * Must initialize all function pointers and is assumed to succeed.
+        */
+       void (*init)(struct audio_format_handler*);
+       /**
+        * period of time between sending data chunks
+       */
+       struct timeval chunk_tv; /* length of one chunk of data */
+       /**
+        * end of file timeout - do not load new audio file until this time
+        *
+       */
+       struct timeval eof_tv; /* timeout on eof */
+       /**
+        * Pointer to the optional get-header function.
+        *
+        * This is called from a sender in case a new client connects in the middle of
+        * the stream.  The audio format handler may set this to NULL to indicate that
+        * this audio format does not need any special header treatment.  If non-NULL,
+        * the function it points to must return a pointer to a buffer holding the
+        * current audio file header, together with the header length.
+       */
+       char *(*get_header_info)(int *header_len);
+       /**
+        * check if this audio format handler can handle the file
+        *
+        * This is a  pointer to a function returning whether a given file is valid for
+        * this audio format. A negative return value indicates that this audio format
+        * handler did not recognize the given file. On success, the function is
+        * expected to return a positive value and to fill in \arg info_str, \arg
+        * chunks and \arg seconds appropriately.
+       */
+       int (*get_file_info)(FILE *audio_file, char *info_str,
+               long unsigned *chunks, int *seconds);
+       /**
+        * cleanup function of this audio format handler
+        *
+        * This close function should deallocate any resources
+        * associated with the current audio file. In particular, it is responsible
+        * for closing the file handle. It is assumed to succeed.
+       */
+       void (*close_audio_file)(void);
+       /**
+        * jump to another position in the current audio file
+        *
+        * This is called if a client issued the ff or jmp command with \a request
+        * being the number of the next chunk that should be sent out. Must return a
+        * positive value on success and a negative value on errors.
+       */
+       int (*reposition_stream)(long unsigned request);
+       /**
+        * function responsible for reading one data chunk.
+        *
+        * \a read_chunk() must return a pointer to the next chunk of data that should
+        * be sent out, or \p NULL on errors or if the end of the file was encountered.
+        *
+        * If it returns non-NULL, \a len must contain the length of the returned
+        * buffer (which may be zero if nothing has to be sent for some reason).
+        * Otherwise, \a len is used to distinguish between the eof and the error case:
+        * It must be zero in the eof case, or negative if an error occcured.
+       */
+       char * (*read_chunk)(long unsigned chunk_num, ssize_t *len);
+};
diff --git a/afs.c b/afs.c
index e3b0db55894dfb4705ed5c052594d6469fb6332d..41ef1e21b126968dd7d7fe9bdf8a11f964a28782 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -26,6 +26,7 @@
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
 #include "db.h"
+#include "afh.h"
 #include "afs.h"
 #include "send.h"
 #include "error.h"
@@ -393,6 +394,10 @@ char *afs_get_header(int *header_len)
                return NULL;
        return afl[mmd->audio_format].get_header_info(header_len);
 }
+const char *supported_audio_formats(void)
+{
+       return SUPPORTED_AUDIO_FORMATS;
+}
 
 /**
  * get the chunk time of the current audio file
diff --git a/afs.h b/afs.h
index 3725ffa10c52baaef3926ecea50178ea99c4aa46..3f4d1d7cf6eee49b8052214ae0e52dbf5e225a09 100644 (file)
--- a/afs.h
+++ b/afs.h
  *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  */
 
-/** \file afs.h functions and structures for audio format handling (para_server) */
-
-/** \cond */
-#ifdef HAVE_OGGVORBIS
-#define OV_AUDIO_FORMAT " ogg"
-#define OV_AUDIO_FORMAT_ARRAY , "ogg"
-#else
-#define OV_AUDIO_FORMAT ""
-#define OV_AUDIO_FORMAT_ARRAY
-#endif
-
-#ifdef HAVE_FAAD
-#define AAC_AUDIO_FORMAT " aac"
-#define AAC_AUDIO_FORMAT_ARRAY , "aac"
-#else
-#define AAC_AUDIO_FORMAT ""
-#define AAC_AUDIO_FORMAT_ARRAY
-#endif
-
-#define SUPPORTED_AUDIO_FORMATS "mp3" OV_AUDIO_FORMAT AAC_AUDIO_FORMAT
-#define SUPPORTED_AUDIO_FORMATS_ARRAY "mp3" OV_AUDIO_FORMAT_ARRAY \
-       AAC_AUDIO_FORMAT_ARRAY, NULL
-
-/* status flags */
-#define AFS_NOMORE 1
-#define AFS_NEXT 2
-#define AFS_REPOS 4
-#define AFS_PLAYING 8
-#define DBT_CHANGE 16
-/** \endcond */
-
-/**
- * structure for audio format handling
- *
- * There's exactly one such struct for each supported audio format. Initially,
- * only \a name and \a init are defined. During the startup process,
- * para_server calls the \a init function of each audio format handler which is
- * expected to fill in all the other function pointers.
- */
-struct audio_format_handler {
-       /**
-        * name of the audio format
-        */
-       const char *name;
-       /**
-        * typical file endings for files that can be handled by this afh.
-        */
-       const char **suffixes;
-       /**
-        * pointer to the audio format handler's init function
-        *
-        * Must initialize all function pointers and is assumed to succeed.
-        */
-       void (*init)(struct audio_format_handler*);
-       /**
-        * period of time between sending data chunks
-       */
-       struct timeval chunk_tv; /* length of one chunk of data */
-       /**
-        * end of file timeout - do not load new audio file until this time
-        *
-       */
-       struct timeval eof_tv; /* timeout on eof */
-       /**
-        * Pointer to the optional get-header function.
-        *
-        * This is called from a sender in case a new client connects in the middle of
-        * the stream.  The audio format handler may set this to NULL to indicate that
-        * this audio format does not need any special header treatment.  If non-NULL,
-        * the function it points to must return a pointer to a buffer holding the
-        * current audio file header, together with the header length.
-       */
-       char *(*get_header_info)(int *header_len);
-       /**
-        * check if this audio format handler can handle the file
-        *
-        * This is a  pointer to a function returning whether a given file is valid for
-        * this audio format. A negative return value indicates that this audio format
-        * handler did not recognize the given file. On success, the function is
-        * expected to return a positive value and to fill in \arg info_str, \arg
-        * chunks and \arg seconds appropriately.
-       */
-       int (*get_file_info)(FILE *audio_file, char *info_str,
-               long unsigned *chunks, int *seconds);
-       /**
-        * cleanup function of this audio format handler
-        *
-        * This close function should deallocate any resources
-        * associated with the current audio file. In particular, it is responsible
-        * for closing the file handle. It is assumed to succeed.
-       */
-       void (*close_audio_file)(void);
-       /**
-        * jump to another position in the current audio file
-        *
-        * This is called if a client issued the ff or jmp command with \a request
-        * being the number of the next chunk that should be sent out. Must return a
-        * positive value on success and a negative value on errors.
-       */
-       int (*reposition_stream)(long unsigned request);
-       /**
-        * function responsible for reading one data chunk.
-        *
-        * \a read_chunk() must return a pointer to the next chunk of data that should
-        * be sent out, or \p NULL on errors or if the end of the file was encountered.
-        *
-        * If it returns non-NULL, \a len must contain the length of the returned
-        * buffer (which may be zero if nothing has to be sent for some reason).
-        * Otherwise, \a len is used to distinguish between the eof and the error case:
-        * It must be zero in the eof case, or negative if an error occcured.
-       */
-       char * (*read_chunk)(long unsigned chunk_num, ssize_t *len);
-};
-
-
+/** \file afs.h exported functions from afs.c (para_server) */
 void afs_init(void);
 void afs_send_chunk(void);
 struct timeval *afs_preselect(void);
@@ -142,3 +28,10 @@ unsigned int afs_paused(void);
 char *afs_get_header(int *header_len);
 struct timeval *afs_chunk_time(void);
 int guess_audio_format(const char *name);
+const char *supported_audio_formats(void);
+/* status flags */
+#define AFS_NOMORE 1
+#define AFS_NEXT 2
+#define AFS_REPOS 4
+#define AFS_PLAYING 8
+#define DBT_CHANGE 16
index f2c54973888ab17557f2854eaa069dc52563837c..531c776a3249e6d555c6570746c1e6036e125f7d 100644 (file)
--- a/command.c
+++ b/command.c
@@ -591,7 +591,7 @@ static int com_si(int fd, int argc, __a_unused char **argv)
                mmd->num_connects,
                conf.loglevel_arg,
                selector_string,
-               SUPPORTED_AUDIO_FORMATS,
+               supported_audio_formats(),
                sender_list,
                sender_info
        );
diff --git a/mp3.c b/mp3.c
index d8ec8bec3b592d75419c02e275d9f23ac7b8674c..4bd8888767406187d51f2f40f87cd8cc25d8c345 100644 (file)
--- a/mp3.c
+++ b/mp3.c
@@ -31,6 +31,7 @@
 #include "server.cmdline.h"
 #include "server.h"
 #include "afs.h"
+#include "afh.h"
 #include "error.h"
 #include "fd.h"
 
diff --git a/ogg.c b/ogg.c
index 6bdb2306f6c0fb29147d8b63673e804060c2b3cd..3445970bd867acfbcd7ad52a1df1a58edd9bf691 100644 (file)
--- a/ogg.c
+++ b/ogg.c
@@ -24,6 +24,7 @@
 #include "server.cmdline.h"
 #include "server.h"
 #include "afs.h"
+#include "afh.h"
 #include "error.h"
 #include "string.h"
 
@@ -46,7 +47,7 @@ static int ogg_compute_header_len(void)
        unsigned int serial;
        char *buf;
        ogg_page page;
-        ogg_packet packet;
+       ogg_packet packet;
        vorbis_comment vc;
        vorbis_info vi;
        ogg_stream_state *stream_in = para_malloc(sizeof(ogg_stream_state));
index 2391e07c360d93f68e85a76c99bc783e1f2d4bc0..1805c92b62de84d7131bf71c905dc3d8d23a0d93 100644 (file)
--- a/server.c
+++ b/server.c
@@ -33,6 +33,7 @@
 #include "db.h"
 #include "server.h"
 #include "afs.h"
+#include "afh.h" /* FIXME */
 #include "config.h"
 #include "close_on_fork.h"
 #include "send.h"