Merge branch 'maint'
[paraslash.git] / afh.c
diff --git a/afh.c b/afh.c
index 8279c577b9afde0354b2a9b8a8f6744c83523905..9d40caeb8b33fb7442bb1f822af7f6eba0a2c332 100644 (file)
--- a/afh.c
+++ b/afh.c
@@ -20,7 +20,7 @@
 /** Array of error strings. */
 DEFINE_PARA_ERRLIST;
 
-struct lls_parse_result *lpr;
+static struct lls_parse_result *lpr;
 
 #define CMD_PTR (lls_cmd(0, afh_suite))
 #define OPT_RESULT(_name) (lls_opt_result(LSG_AFH_PARA_AFH_OPT_ ## _name, lpr))
@@ -135,29 +135,38 @@ static void print_info(int audio_format_num, struct afh_info *afhi)
        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 (OPT_GIVEN(PARSER_FRIENDLY)) {
-               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 (!OPT_GIVEN(PARSER_FRIENDLY))
+                       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 (!OPT_GIVEN(PARSER_FRIENDLY))
+                       printf(" (%zu)", len);
+               printf("\n");
        }
+       afh_close(ctx, audio_format_id);
 }
 
 static void handle_help_flags(void)
@@ -219,8 +228,8 @@ int main(int argc, char **argv)
                                printf("File %d: %s\n", i + 1, path);
                                print_info(audio_format_num, &afhi);
                                if (OPT_GIVEN(CHUNK_TABLE))
-                                       print_chunk_table(&afhi);
-                               printf("\n");
+                                       print_chunk_table(&afhi, audio_format_num,
+                                               audio_file_data, audio_file_size);
                        }
                        clear_afhi(&afhi);
                }