]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge branch 'master' into next
authorAndre Noll <maan@systemlinux.org>
Sat, 2 May 2009 09:50:17 +0000 (11:50 +0200)
committerAndre Noll <maan@systemlinux.org>
Sat, 2 May 2009 09:50:17 +0000 (11:50 +0200)
alsa_write.c
fecdec_filter.c

index dd91cd84f1d5e648a2b1a4f0fa3a7859a7f51093..b6a087a3d6b87353796dff34ac790d6c64f58e4d 100644 (file)
@@ -45,8 +45,8 @@ struct private_alsa_write_data {
         */
        unsigned samplerate;
        /**
-        * the number of channels, also given by command line option or the
-        * decoder of the writer node group
+        * The number of channels, given by command line option or the
+        * decoder of the writer node group.
         */
        unsigned channels;
 };
@@ -211,9 +211,12 @@ static void alsa_close(struct writer_node *wn)
 {
        struct private_alsa_write_data *pad = wn->private_data;
        PARA_INFO_LOG("closing writer node %p\n", wn);
-       snd_pcm_drain(pad->handle);
-       snd_pcm_close(pad->handle);
-       snd_config_update_free_global();
+
+       if (pad->handle) {
+               snd_pcm_drain(pad->handle);
+               snd_pcm_close(pad->handle);
+               snd_config_update_free_global();
+       }
        free(pad);
 }
 
index bc5300627dbdfb7a1ab1bf37f0ac5aa681dbd4a2..5f37f1a81f9199f6080b6669cd455d706a96af06 100644 (file)
@@ -117,10 +117,15 @@ static int find_group(struct fec_header *h,
        FOR_EACH_FECDEC_GROUP(fg, pfd) {
                if (fg->h.group_num != h->group_num)
                        continue;
+               if (fg->num_received_slices == 0)
+                       goto success;
                if (fg->h.slices_per_group != h->slices_per_group)
-                       continue;
+                       return -E_BAD_FEC_HEADER;
                if (fg->h.data_slices_per_group != h->data_slices_per_group)
-                       continue;
+                       return -E_BAD_FEC_HEADER;
+               if (fg->h.group_bytes != h->group_bytes)
+                       return -E_BAD_FEC_HEADER;
+success:
                *result = fg;
                return 1;
        }
@@ -161,8 +166,8 @@ static struct fecdec_group *free_oldest_group(struct private_fecdec_data *pfd)
        }
        if (!group_complete(oldest) && !group_empty(oldest))
                PARA_WARNING_LOG("Clearing incomplete group %d "
-                       "(contains %d slices)\n", fg->h.group_num,
-                       fg->num_received_slices);
+                       "(contains %d slices)\n", oldest->h.group_num,
+                       oldest->num_received_slices);
        clear_group(oldest);
        return oldest;
 }