unsigned short duration_width;
/** size of the num played field. */
unsigned short num_played_width;
+ /** size of the amp field. */
+ unsigned short amp_width;
};
/** Data passed from the ls command handler to its callback function. */
AFSI_LYRICS_ID_OFFSET = 24,
/** Storage position of the .audio_format_id field. */
AFSI_AUDIO_FORMAT_ID_OFFSET = 28,
- /** 3 bytes reserved space for future usage. */
- AFSI_AUDIO_FORMAT_UNUSED_OFFSET = 29,
+ /** Storage position of the amplification field. */
+ AFSI_AMP_OFFSET = 29,
+ /** 2 bytes reserved space for future usage. */
+ AFSI_AUDIO_FORMAT_UNUSED_OFFSET = 30,
/** On-disk storage space needed. */
AFSI_SIZE = 32
};
write_u32(buf + AFSI_LYRICS_ID_OFFSET, afsi->lyrics_id);
write_u8(buf + AFSI_AUDIO_FORMAT_ID_OFFSET,
afsi->audio_format_id);
- memset(buf + AFSI_AUDIO_FORMAT_UNUSED_OFFSET, 0, 3);
+ write_u8(buf + AFSI_AMP_OFFSET, afsi->amp);
+ memset(buf + AFSI_AUDIO_FORMAT_UNUSED_OFFSET, 0, 2);
}
/**
afsi->lyrics_id = read_u32(buf + AFSI_LYRICS_ID_OFFSET);
afsi->audio_format_id = read_u8(buf +
AFSI_AUDIO_FORMAT_ID_OFFSET);
+ afsi->amp = read_u8(buf + AFSI_AMP_OFFSET);
return 1;
}
ret = para_printf(b,
"%s" /* score */
"%s " /* attributes */
+ "%*u " /* amp */
"%*d " /* image_id */
"%*d " /* lyrics_id */
"%*d " /* bitrate */
"%s\n", /* path */
score_buf,
att_buf,
+ w->amp_width, afsi->amp,
w->image_id_width, afsi->image_id,
w->lyrics_id_width, afsi->lyrics_id,
w->bitrate_width, afhi->bitrate,
"%s: %lu\n" /* seconds total */
"%s: %s\n" /* last played time */
"%s: %d\n" /* num_played */
+ "%s: %u\n" /* ampplification */
"%s" /* tag info */
"%s: %lu\n" /* chunk time */
"%s: %lu\n", /* num chunks */
status_item_list[SI_SECONDS_TOTAL], afhi->seconds_total,
status_item_list[SI_LAST_PLAYED], last_played_time,
status_item_list[SI_NUM_PLAYED], afsi->num_played,
+ status_item_list[SI_AMPLIFICATION], afsi->amp,
afhi->info_string,
status_item_list[SI_CHUNK_TIME], tv2ms(&afhi->chunk_tv),
status_item_list[SI_NUM_CHUNKS], afhi->chunks_total
/* get the number of chars to print this amount of time */
tmp = get_duration_width(d->afhi.seconds_total);
w->duration_width = PARA_MAX(w->duration_width, tmp);
+ GET_NUM_DIGITS(d->afsi.amp, &num_digits);
+ w->amp_width = PARA_MAX(w->amp_width, num_digits);
if (options->flags & LS_FLAG_ADMISSIBLE_ONLY) {
GET_NUM_DIGITS(score, &num_digits);
num_digits++; /* add one for the sign (space or "-") */
static int add_one_audio_file(const char *path, void *private_data)
{
- int ret, send_ret = 1;
+ int ret, send_ret = 1, fd;
uint8_t format_num = -1;
struct private_add_data *pad = private_data;
struct afh_info afhi, *afhi_ptr = NULL;
goto out_free;
}
/* We still want to add this file. Compute its hash. */
- ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, NULL);
+ ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, &fd);
if (ret < 0)
goto out_free;
hash_function(map.data, map.size, hash);
* there is a hash sister and FORCE was not given.
*/
if (!hs || (pad->flags & ADD_FLAG_FORCE)) {
- ret = compute_afhi(path, map.data, map.size, &afhi);
+ ret = compute_afhi(path, map.data, map.size, fd, &afhi);
if (ret < 0)
goto out_unmap;
format_num = ret;
goto out_free;
out_unmap:
+ close(fd);
munmap(map.data, map.size);
out_free:
if (ret < 0 && send_ret >= 0)