/*
- * Copyright (C) 2007-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
/** \file afs.h Exported symbols of the audio file selector. */
#include <regex.h>
-#include "hash.h"
/** Audio file selector data stored in the audio file table. */
struct afs_info {
uint32_t image_id;
/** Lyrics blob associated with this file (foreign key). */
uint32_t lyrics_id;
- /** Mp3, ogg or aac. */
+ /** Mp3, ogg, aac, wma, spx. */
uint8_t audio_format_id;
/** Amplification value. */
uint8_t amp;
void *data);
};
-enum play_mode {PLAY_MODE_MOOD, PLAY_MODE_PLAYLIST};
+/** How audio files are selected by afs. */
+enum play_mode {
+ /** Admissible files are determined by a mood definition. */
+ PLAY_MODE_MOOD,
+ /** All listed files are admissible. */
+ PLAY_MODE_PLAYLIST,
+};
/**
* Data about one audio file.
char *path;
/** The score value (if -a was given). */
long score;
- /** The sha1 hash of audio file. */
- HASH_TYPE *hash;
+ /** The hash value of audio file data. */
+ unsigned char *hash;
};
/** Data about the current audio file, passed from afs to server. */
int fd;
/** Vss needs this for streaming. */
struct afh_info afhi;
+ /** Size of the largest chunk. */
+ uint32_t max_chunk_size;
+ /** Needed to get the audio file header. */
+ uint8_t audio_format_id;
};
+/**
+ * Codes used for communication between the server and the afs process.
+ *
+ * Before forking the afs child, para_server creates a bidirectional pipe
+ * through which both processes communicate. Usually para_server requests a new
+ * audio in order to start streaming or when the end of the current audio file
+ * has been reached. The afs process responds to such a request by sending
+ * back an eight byte buffer. The first four bytes is the uint32_t
+ * representation of the code, usually \p NEXT_AUDIO_FILE if an admissible
+ * audio file was found, successfully opened and verified. The other four bytes
+ * represent the shared memory id of the shared memory area that contains
+ * details about the audio file to be streamed next. The open file descriptor
+ * of that file is also passed from afs to para_server through the same pipe.
+ */
enum afs_server_code {
+ /** An audio file was successfully opened. */
NEXT_AUDIO_FILE,
+ /** No admissible audio file was found. */
NO_ADMISSIBLE_FILES,
- AFD_CHANGE
};
/** Flags passed to for_each_matching_row(). */
* \sa \ref send_callback_request().
*/
typedef int callback_result_handler(struct osl_object *result, void *private);
-int rc4_send_result(struct osl_object *result, void *private);
+int sc_send_result(struct osl_object *result, void *private);
int pass_buffer_as_shm(char *buf, size_t size, void *fd_ptr);
__noreturn void afs_init(uint32_t cookie, int socket_fd);