decoder/wavpack: support all APEv2 tags
WavPack tags are always APEv2, by definition. Reuse the tag_table from tag_ape.c, instead of rolling our own.
This commit is contained in:
parent
04c02a1eb8
commit
7088a679a2
1
NEWS
1
NEWS
|
@ -6,6 +6,7 @@ ver 0.17.2 (2012/??/??)
|
||||||
- fluidsynth: stop playback at end of file
|
- fluidsynth: stop playback at end of file
|
||||||
- fluidsynth: check MIDI file format while scanning
|
- fluidsynth: check MIDI file format while scanning
|
||||||
- fluidsynth: add sample rate setting
|
- fluidsynth: add sample rate setting
|
||||||
|
- wavpack: support all APEv2 tags
|
||||||
* output:
|
* output:
|
||||||
- httpd: use monotonic clock, avoid hiccups after system clock adjustment
|
- httpd: use monotonic clock, avoid hiccups after system clock adjustment
|
||||||
- httpd: fix throttling bug after resuming playback
|
- httpd: fix throttling bug after resuming playback
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "tag_table.h"
|
#include "tag_table.h"
|
||||||
#include "tag_handler.h"
|
#include "tag_handler.h"
|
||||||
|
#include "tag_ape.h"
|
||||||
|
|
||||||
#include <wavpack/wavpack.h>
|
#include <wavpack/wavpack.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
@ -38,21 +39,6 @@
|
||||||
|
|
||||||
#define ERRORLEN 80
|
#define ERRORLEN 80
|
||||||
|
|
||||||
static const struct tag_table wavpack_tags[] = {
|
|
||||||
{ "artist", TAG_ARTIST },
|
|
||||||
{ "album", TAG_ALBUM },
|
|
||||||
{ "title", TAG_TITLE },
|
|
||||||
{ "track", TAG_TRACK },
|
|
||||||
{ "name", TAG_NAME },
|
|
||||||
{ "genre", TAG_GENRE },
|
|
||||||
{ "date", TAG_DATE },
|
|
||||||
{ "composer", TAG_COMPOSER },
|
|
||||||
{ "performer", TAG_PERFORMER },
|
|
||||||
{ "comment", TAG_COMMENT },
|
|
||||||
{ "disc", TAG_DISC },
|
|
||||||
{ NULL, TAG_NUM_OF_ITEM_TYPES }
|
|
||||||
};
|
|
||||||
|
|
||||||
/** A pointer type for format converter function. */
|
/** A pointer type for format converter function. */
|
||||||
typedef void (*format_samples_t)(
|
typedef void (*format_samples_t)(
|
||||||
int bytes_per_sample,
|
int bytes_per_sample,
|
||||||
|
@ -321,7 +307,17 @@ wavpack_scan_file(const char *fname,
|
||||||
WavpackGetNumSamples(wpc) /
|
WavpackGetNumSamples(wpc) /
|
||||||
WavpackGetSampleRate(wpc));
|
WavpackGetSampleRate(wpc));
|
||||||
|
|
||||||
for (const struct tag_table *i = wavpack_tags; i->name != NULL; ++i)
|
/* the WavPack format implies APEv2 tags, which means we can
|
||||||
|
reuse the mapping from tag_ape.c */
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i) {
|
||||||
|
const char *name = tag_item_names[i];
|
||||||
|
if (name != NULL)
|
||||||
|
wavpack_scan_tag_item(wpc, name, (enum tag_type)i,
|
||||||
|
handler, handler_ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const struct tag_table *i = ape_tags; i->name != NULL; ++i)
|
||||||
wavpack_scan_tag_item(wpc, i->name, i->type,
|
wavpack_scan_tag_item(wpc, i->name, i->type,
|
||||||
handler, handler_ctx);
|
handler, handler_ctx);
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include "tag_handler.h"
|
#include "tag_handler.h"
|
||||||
#include "ape.h"
|
#include "ape.h"
|
||||||
|
|
||||||
static const struct tag_table ape_tags[] = {
|
const struct tag_table ape_tags[] = {
|
||||||
{ "album artist", TAG_ALBUM_ARTIST },
|
{ "album artist", TAG_ALBUM_ARTIST },
|
||||||
{ "year", TAG_DATE },
|
{ "year", TAG_DATE },
|
||||||
{ NULL, TAG_NUM_OF_ITEM_TYPES }
|
{ NULL, TAG_NUM_OF_ITEM_TYPES }
|
||||||
|
|
|
@ -20,10 +20,14 @@
|
||||||
#ifndef MPD_TAG_APE_H
|
#ifndef MPD_TAG_APE_H
|
||||||
#define MPD_TAG_APE_H
|
#define MPD_TAG_APE_H
|
||||||
|
|
||||||
|
#include "tag_table.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
struct tag_handler;
|
struct tag_handler;
|
||||||
|
|
||||||
|
extern const struct tag_table ape_tags[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scan the APE tags of a file.
|
* Scan the APE tags of a file.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue