diff options
Diffstat (limited to '')
-rw-r--r-- | src/ApeReplayGain.cxx (renamed from src/replay_gain_ape.c) | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/src/replay_gain_ape.c b/src/ApeReplayGain.cxx index 0b59e3c02..0135d1b61 100644 --- a/src/replay_gain_ape.c +++ b/src/ApeReplayGain.cxx @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2011 The Music Player Daemon Project + * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -18,61 +18,61 @@ */ #include "config.h" -#include "replay_gain_ape.h" +#include "ApeReplayGain.hxx" +#include "ApeLoader.hxx" #include "replay_gain_info.h" -#include "ape.h" #include <glib.h> #include <string.h> #include <stdlib.h> -struct rg_ape_ctx { - struct replay_gain_info *info; - bool found; -}; - static bool replay_gain_ape_callback(unsigned long flags, const char *key, - const char *_value, size_t value_length, void *_ctx) + const char *_value, size_t value_length, + struct replay_gain_info *info) { - struct rg_ape_ctx *ctx = _ctx; - /* we only care about utf-8 text tags */ if ((flags & (0x3 << 1)) != 0) - return true; + return false; char value[16]; if (value_length >= sizeof(value)) - return true; + return false; + memcpy(value, _value, value_length); value[value_length] = 0; if (g_ascii_strcasecmp(key, "replaygain_track_gain") == 0) { - ctx->info->tuples[REPLAY_GAIN_TRACK].gain = atof(value); - ctx->found = true; + info->tuples[REPLAY_GAIN_TRACK].gain = atof(value); + return true; } else if (g_ascii_strcasecmp(key, "replaygain_album_gain") == 0) { - ctx->info->tuples[REPLAY_GAIN_ALBUM].gain = atof(value); - ctx->found = true; + info->tuples[REPLAY_GAIN_ALBUM].gain = atof(value); + return true; } else if (g_ascii_strcasecmp(key, "replaygain_track_peak") == 0) { - ctx->info->tuples[REPLAY_GAIN_TRACK].peak = atof(value); - ctx->found = true; + info->tuples[REPLAY_GAIN_TRACK].peak = atof(value); + return true; } else if (g_ascii_strcasecmp(key, "replaygain_album_peak") == 0) { - ctx->info->tuples[REPLAY_GAIN_ALBUM].peak = atof(value); - ctx->found = true; - } - - return true; + info->tuples[REPLAY_GAIN_ALBUM].peak = atof(value); + return true; + } else + return false; } bool replay_gain_ape_read(const char *path_fs, struct replay_gain_info *info) { - struct rg_ape_ctx ctx = { - .info = info, - .found = false, + bool found = false; + + auto callback = [info, &found] + (unsigned long flags, const char *key, + const char *value, + size_t value_length) { + found |= replay_gain_ape_callback(flags, key, + value, value_length, + info); + return true; }; - return tag_ape_scan(path_fs, replay_gain_ape_callback, &ctx) && - ctx.found; + return tag_ape_scan(path_fs, callback) && found; } |