#include "version.h"
#include "ggo.h"
+/** Array of error strings. */
+DEFINE_PARA_ERRLIST;
+
static struct afh_args_info conf;
-INIT_AFH_ERRLISTS;
static int loglevel;
INIT_STDERR_LOGGING(loglevel)
free(msg);
}
-static void print_chunk_table(struct afh_info *afhi)
+static void print_chunk_table(struct afh_info *afhi, int audio_format_id,
+ const void *map, size_t mapsize)
{
- int i;
+ int i, ret;
+ void *ctx = NULL;
- if (conf.parser_friendly_given) {
- printf("chunk_table: ");
- for (i = 0; i <= afhi->chunks_total; i++)
- printf("%u ", afhi->chunk_table[i]);
- printf("\n");
- return;
- }
- for (i = 1; i <= afhi->chunks_total; i++) {
+ for (i = 0; i < afhi->chunks_total; i++) {
struct timeval tv;
long unsigned from, to;
- tv_scale(i - 1, &afhi->chunk_tv, &tv);
- from = tv2ms(&tv);
+ const char *buf;
+ size_t len;
tv_scale(i, &afhi->chunk_tv, &tv);
+ from = tv2ms(&tv);
+ tv_scale(i + 1, &afhi->chunk_tv, &tv);
to = tv2ms(&tv);
- printf("%d [%lu.%03lu - %lu.%03lu] %u - %u (%u)\n", i - 1,
- from / 1000, from % 1000, to / 1000, to % 1000,
- afhi->chunk_table[i - 1], afhi->chunk_table[i],
- afhi->chunk_table[i] - afhi->chunk_table[i - 1]);
+ ret = afh_get_chunk(i, afhi, audio_format_id, map, mapsize,
+ &buf, &len, &ctx);
+ if (ret < 0) {
+ PARA_ERROR_LOG("fatal: chunk %d: %s\n", i,
+ para_strerror(-ret));
+ return;
+ }
+ if (!conf.parser_friendly_given)
+ printf("%d [%lu.%03lu - %lu.%03lu] ", i, from / 1000,
+ from % 1000, to / 1000, to % 1000);
+ printf("%td - %td", buf - (const char *)map,
+ buf + len - (const char *)map);
+ if (!conf.parser_friendly_given)
+ printf(" (%zu)", len);
+ printf("\n");
}
+ afh_close(ctx, audio_format_id);
}
__noreturn static void print_help_and_die(void)
*/
int main(int argc, char **argv)
{
- int i, ret, audio_format_num, fd;
+ int i, ret = 0, audio_format_num, fd;
void *audio_file_data;
size_t audio_file_size;
struct afh_info afhi;
afh_cmdline_parser(argc, argv, &conf);
loglevel = get_loglevel_by_name(conf.loglevel_arg);
version_handle_flag("afh", conf.version_given);
- if (conf.help_given || conf.detailed_help_given)
+ if (conf.help_given || conf.detailed_help_given || conf.inputs_num == 0)
print_help_and_die();
afh_init();
- ret = -E_AFH_SYNTAX;
- if (conf.inputs_num == 0)
- goto out;
for (i = 0; i < conf.inputs_num; i++) {
int ret2;
ret = mmap_full_file(conf.inputs[i], O_RDONLY, &audio_file_data,
printf("File %d: %s\n", i + 1, conf.inputs[i]);
print_info(audio_format_num, &afhi);
if (conf.chunk_table_given)
- print_chunk_table(&afhi);
- printf("\n");
+ print_chunk_table(&afhi, audio_format_num,
+ audio_file_data, audio_file_size);
}
clear_afhi(&afhi);
}