X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=mp3_afh.c;h=d7493ac01e28bba581b7112a41a37e84426be11a;hp=08837bec597918ed73fe27febbb0a42fbadf654e;hb=HEAD;hpb=7649f22106cec2c6eb8bb10f279401e1af5451d0 diff --git a/mp3_afh.c b/mp3_afh.c index 08837bec..56f28a09 100644 --- a/mp3_afh.c +++ b/mp3_afh.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2003 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2003 Andre Noll , see file COPYING. */ /** \file mp3_afh.c para_server's mp3 audio format handler */ @@ -41,9 +37,6 @@ struct mp3header { unsigned int freq; unsigned int padding; unsigned int mode; - unsigned int copyright; - unsigned int original; - unsigned int emphasis; }; static const int frequencies[3][4] = { @@ -67,8 +60,6 @@ static const int mp3info_bitrate[2][3][14] = { }; static const int frame_size_index[] = {24000, 72000, 72000}; -static const char *mode_text[] = {"stereo", "joint stereo", "dual channel", "mono", "invalid"}; - #ifdef HAVE_ID3TAG #include @@ -354,7 +345,7 @@ static int mp3_rewrite_tags(const char *map, size_t mapsize, if (ret < 0) goto out; new_v2size = id3_tag_render(v2_tag, NULL); - v2_buffer = para_malloc(new_v2size); + v2_buffer = alloc(new_v2size); id3_tag_render(v2_tag, v2_buffer); PARA_INFO_LOG("writing v2 tag (%lu bytes)\n", new_v2size); ret = write_all(fd, (char *)v2_buffer, new_v2size); @@ -437,10 +428,13 @@ static int header_frequency(struct mp3header *h) return frequencies[h->version][h->freq]; } -static const char *header_mode(struct mp3header *h) +static const char *header_mode(const struct mp3header *h) { - if (h->mode > 4) - h->mode = 4; /* invalid */ + const char * const mode_text[] = {"stereo", "joint stereo", + "dual channel", "mono"}; + + if (h->mode >= ARRAY_SIZE(mode_text)) + return "invalid"; return mode_text[h->mode]; } @@ -476,7 +470,7 @@ static int frame_length(struct mp3header *header) + header->padding; } -static int compare_headers(struct mp3header *h1,struct mp3header *h2) +static int compare_headers(struct mp3header *h1, struct mp3header *h2) { if ((*(unsigned int*)h1) == (*(unsigned int*)h2)) return 1; @@ -484,10 +478,7 @@ static int compare_headers(struct mp3header *h1,struct mp3header *h2) (h1->layer == h2->layer) && (h1->crc == h2->crc) && (h1->freq == h2->freq) && - (h1->mode == h2->mode) && - (h1->copyright == h2->copyright) && - (h1->original == h2->original) && - (h1->emphasis == h2->emphasis)) + (h1->mode == h2->mode)) return 1; return 0; } @@ -601,7 +592,7 @@ static int mp3_read_info(unsigned char *map, size_t numbytes, int fd, const char *tag_versions[] = {"no", "id3v1", "id3v2", "id3v1+id3v2"}; afhi->chunks_total = 0; - afhi->chunk_table = para_malloc(chunk_table_size * sizeof(uint32_t)); + afhi->chunk_table = arr_alloc(chunk_table_size, sizeof(uint32_t)); while (1) { int freq, br; struct timeval tmp, cct; /* current chunk time */ @@ -636,8 +627,8 @@ static int mp3_read_info(unsigned char *map, size_t numbytes, int fd, total_time = tmp; if (afhi->chunks_total >= chunk_table_size) { chunk_table_size *= 2; - afhi->chunk_table = para_realloc(afhi->chunk_table, - chunk_table_size * sizeof(uint32_t)); + afhi->chunk_table = arr_realloc(afhi->chunk_table, + chunk_table_size, sizeof(uint32_t)); } afhi->chunk_table[afhi->chunks_total] = fpos; afhi->chunks_total++; @@ -655,7 +646,7 @@ static int mp3_read_info(unsigned char *map, size_t numbytes, int fd, afhi->channels = header_channels(&header); afhi->seconds_total = (tv2ms(&total_time) + 500) / 1000; tv_divide(afhi->chunks_total, &total_time, &afhi->chunk_tv); - PARA_DEBUG_LOG("%" PRIu32 "chunks, each %lums\n", afhi->chunks_total, + PARA_DEBUG_LOG("%" PRIu32 " chunks, each %lums\n", afhi->chunks_total, tv2ms(&afhi->chunk_tv)); set_max_chunk_size(afhi); ret = mp3_get_id3(map, numbytes, fd, &afhi->tags); @@ -678,7 +669,7 @@ static int mp3_get_file_info(char *map, size_t numbytes, int fd, ret = mp3_read_info((unsigned char *)map, numbytes, fd, afhi); if (ret < 0) return ret; - if (afhi->seconds_total < 2 || !afhi->chunks_total) + if (afhi->chunks_total == 0) return -E_MP3_INFO; return 1; } @@ -686,15 +677,14 @@ static int mp3_get_file_info(char *map, size_t numbytes, int fd, static const char * const mp3_suffixes[] = {"mp3", NULL}; /** - * the init function of the mp3 audio format handler + * The mp3 audio format handler. * - * \param afh pointer to the struct to initialize + * It does not depend on any libraries and is hence always compiled in. */ -void mp3_afh_init(struct audio_format_handler *afh) -{ - afh->get_file_info = mp3_get_file_info; - afh->suffixes = mp3_suffixes; +const struct audio_format_handler mp3_afh = { + .get_file_info = mp3_get_file_info, + .suffixes = mp3_suffixes, #ifdef HAVE_LIBID3TAG - afh->rewrite_tags = mp3_rewrite_tags; + .rewrite_tags = mp3_rewrite_tags, #endif /* HAVE_LIBID3TAG */ -} +};