]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - alsa_writer.c
aac audio format handler: fix end of file timeout
[paraslash.git] / alsa_writer.c
index b0bc3b095826924fe799da12c0bc79a8b0241cba..5aa908518b113305372d126ead651ec961243046 100644 (file)
@@ -16,6 +16,8 @@
  *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  */
 
  *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  */
 
+/** \file alsa_writer.c paraslash's alsa output plugin */
+
 /*
  * Based in parts on aplay.c from the alsa-utils-1.0.8 package,
  * Copyright (c) by Jaroslav Kysela <perex@suse.cz>, which is
 /*
  * Based in parts on aplay.c from the alsa-utils-1.0.8 package,
  * Copyright (c) by Jaroslav Kysela <perex@suse.cz>, which is
 extern struct gengetopt_args_info conf;
 
 #define FORMAT SND_PCM_FORMAT_S16_LE
 extern struct gengetopt_args_info conf;
 
 #define FORMAT SND_PCM_FORMAT_S16_LE
+
+/** data specific to the alsa writer */
 struct private_alsa_data {
 struct private_alsa_data {
-       snd_pcm_t *handle;
-       size_t bytes_per_frame;
+/** the alsa handle */
+snd_pcm_t *handle;
+/** determined and set by alsa_open() */
+size_t bytes_per_frame;
 };
 
 /*
 };
 
 /*
@@ -122,6 +128,8 @@ static int alsa_open(struct writer_node *w)
                return -E_SW_PARAMS;
        pad->bytes_per_frame = snd_pcm_format_physical_width(FORMAT)
                * conf.channels_arg / 8;
                return -E_SW_PARAMS;
        pad->bytes_per_frame = snd_pcm_format_physical_width(FORMAT)
                * conf.channels_arg / 8;
+//     if (snd_pcm_nonblock(pad->handle, 1))
+//             PARA_ERROR_LOG("%s\n", "failed to set nonblock mode");
        return period_size * pad->bytes_per_frame;
 }
 
        return period_size * pad->bytes_per_frame;
 }
 
@@ -136,7 +144,7 @@ static int alsa_write(char *data, size_t nbytes, struct writer_node *wn)
 {
        struct private_alsa_data *pad = wn->private_data;
        size_t frames = nbytes / pad->bytes_per_frame;
 {
        struct private_alsa_data *pad = wn->private_data;
        size_t frames = nbytes / pad->bytes_per_frame;
-       unsigned char *d = data;
+       unsigned char *d = (unsigned char*)data;
        snd_pcm_sframes_t r, result = 0;
 
        while (frames > 0) {
        snd_pcm_sframes_t r, result = 0;
 
        while (frames > 0) {
@@ -168,6 +176,7 @@ static void alsa_close(struct writer_node *wn)
        free(pad);
 }
 
        free(pad);
 }
 
+/** the init function of the alsa writer */
 void alsa_writer_init(struct writer *w)
 {
        w->open = alsa_open;
 void alsa_writer_init(struct writer *w)
 {
        w->open = alsa_open;