/** \file fecdec_filter.c A filter that fec-decodes an audio stream. */
#include <regex.h>
+#include <stdbool.h>
#include <dirent.h>
#include "para.h"
#include "list.h"
#include "sched.h"
#include "ggo.h"
+#include "buffer_tree.h"
#include "filter.h"
#include "string.h"
#include "portable_io.h"
uint8_t slices_per_group;
/** Number of slices needed to start decoding. */
uint8_t data_slices_per_group;
- /** Size of the ogg vorbis header (zero for mp3, aac). */
+ /** Size of the ogg vorbis/wma header (zero for mp3, aac). */
uint32_t audio_header_size;
/** Number of the FEC group this slice belongs to. */
uint32_t group_num;
fg->idx[i] = -1;
}
free(fg->data);
+ fg->data = NULL;
free(fg->idx);
+ fg->idx = NULL;
fg->num_slices = 0;
memset(&fg->h, 0, sizeof(struct fec_header));
fg->num_received_slices = 0;
return 1;
}
+/**
+ * The different states of a complete FEC group.
+ *
+ * Even if a FEC group has been received successfully, it probably can not be
+ * used right away because some streams (ogg, wma) need to receive an audio
+ * file header before decoding can start.
+ */
enum fec_group_usability {
+ /** Drop the group (because we did not receive the header yet). */
FEC_GROUP_UNUSABLE,
+ /** Use all data in the group. */
FEC_GROUP_USABLE,
+ /** Use the group, but drop its audio file header. */
FEC_GROUP_USABLE_SKIP_HEADER,
+ /** Use the group, including its header. */
FEC_GROUP_USABLE_WITH_HEADER
};