/*
- * Copyright (C) 2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2009 Andre Noll <maan@tuebingen.mpg.de>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
/** \file wma_afh.c The audio format handler for WMA files. */
-#include <stdlib.h>
-#include <inttypes.h>
#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
#include <regex.h>
#include "para.h"
return out;
}
-static const char comment_header[] = {
+static const char content_description_header[] = {
0x33, 0x26, 0xb2, 0x75, 0x8E, 0x66, 0xCF, 0x11,
0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c
};
static void read_asf_tags(const char *buf, int buf_size, struct taginfo *ti)
{
const char *p, *end = buf + buf_size, *q;
- uint16_t len1, len2, len3, len4, len5;
+ uint16_t len1, len2, len3, len4;
- p = search_pattern(comment_header, sizeof(comment_header),
- buf, buf_size);
+ p = search_pattern(content_description_header,
+ sizeof(content_description_header), buf, buf_size);
if (!p || p + 34 >= end) {
- PARA_NOTICE_LOG("comment header not found\n");
+ PARA_NOTICE_LOG("content description header not found\n");
goto next;
}
p += 24;
p += 2;
len4 = read_u16(p);
p += 2;
- len5 = read_u16(p);
+ /* ignore length of the rating information */
p += 2;
if (p + len1 >= end)
goto next;
if (p + len2 >= end)
goto next;
ti->artist = get_str16(p, len2);
- p += len2 + len3 + len4;
- if (p + len5 >= end)
+ p += len2 + len3;
+ if (p + len4 >= end)
goto next;
- ti->comment = get_str16(p, len5);
+ ti->comment = get_str16(p, len4);
next:
p = search_pattern(extended_content_header, sizeof(extended_content_header),
buf, buf_size);
goto fail;
afhi->seconds_total = num_frames * 2048 /* FIXME */
/ afhi->frequency;
- frames_per_chunk = num_frames / num_superframes;
+ frames_per_chunk = num_frames / num_superframes / 2;
PARA_INFO_LOG("%d frames per chunk\n", frames_per_chunk);
j = 1;
FOR_EACH_FRAME(f, start, buf_size, block_align) {
afhi->frequency = ahi.sample_rate;
afhi->channels = ahi.channels;
afhi->header_len = ahi.header_len;
- afhi->header_offset = 0;
+
+ afhi->techinfo = make_message("%s%s%s%s%s",
+ ahi.use_exp_vlc? "exp vlc" : "",
+ (ahi.use_bit_reservoir && ahi.use_exp_vlc)? ", " : "",
+ ahi.use_bit_reservoir? "bit reservoir" : "",
+ (ahi.use_variable_block_len &&
+ (ahi.use_exp_vlc || ahi.use_bit_reservoir)? ", " : ""),
+ ahi.use_variable_block_len? "vbl" : ""
+ );
wma_make_chunk_table(map + ahi.header_len, numbytes - ahi.header_len,
ahi.block_align, afhi);
read_asf_tags(map, ahi.header_len, &afhi->tags);