mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
pw-cat: parse metadata and make a nice media.name if possible
This commit is contained in:
parent
ff99a48acf
commit
74eaf5a2ca
2 changed files with 50 additions and 0 deletions
|
|
@ -254,6 +254,9 @@ extern "C" {
|
||||||
* PNG image data */
|
* PNG image data */
|
||||||
#define PW_KEY_MEDIA_ICON_NAME "media.icon-name" /**< an XDG icon name for the media.
|
#define PW_KEY_MEDIA_ICON_NAME "media.icon-name" /**< an XDG icon name for the media.
|
||||||
* Ex: "audio-x-mp3" */
|
* Ex: "audio-x-mp3" */
|
||||||
|
#define PW_KEY_MEDIA_COMMENT "media.comment" /**< extra comment */
|
||||||
|
#define PW_KEY_MEDIA_DATE "media.date" /**< date of the media */
|
||||||
|
#define PW_KEY_MEDIA_FORMAT "media.format" /**< format of the media */
|
||||||
|
|
||||||
/** format related properties */
|
/** format related properties */
|
||||||
#define PW_KEY_FORMAT_DSP "format.dsp" /**< a dsp format.
|
#define PW_KEY_FORMAT_DSP "format.dsp" /**< a dsp format.
|
||||||
|
|
|
||||||
|
|
@ -1103,6 +1103,52 @@ static int setup_midifile(struct data *data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int fill_properties(struct data *data)
|
||||||
|
{
|
||||||
|
static const char* table[] = {
|
||||||
|
[SF_STR_TITLE] = PW_KEY_MEDIA_TITLE,
|
||||||
|
[SF_STR_COPYRIGHT] = PW_KEY_MEDIA_COPYRIGHT,
|
||||||
|
[SF_STR_SOFTWARE] = PW_KEY_MEDIA_SOFTWARE,
|
||||||
|
[SF_STR_ARTIST] = PW_KEY_MEDIA_ARTIST,
|
||||||
|
[SF_STR_COMMENT] = PW_KEY_MEDIA_COMMENT,
|
||||||
|
[SF_STR_DATE] = PW_KEY_MEDIA_DATE
|
||||||
|
};
|
||||||
|
SF_INFO sfi;
|
||||||
|
SF_FORMAT_INFO fi;
|
||||||
|
int res;
|
||||||
|
unsigned c;
|
||||||
|
const char *s, *t;
|
||||||
|
|
||||||
|
for (c = 0; c < SPA_N_ELEMENTS(table); c++) {
|
||||||
|
if (table[c] == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((s = sf_get_string(data->file, c)) == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
pw_properties_set(data->props, table[c], s);
|
||||||
|
}
|
||||||
|
|
||||||
|
spa_zero(sfi);
|
||||||
|
if ((res = sf_command(data->file, SFC_GET_CURRENT_SF_INFO, &sfi, sizeof(sfi)))) {
|
||||||
|
pw_log_error("sndfile: %s", sf_error_number(res));
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
spa_zero(fi);
|
||||||
|
fi.format = sfi.format;
|
||||||
|
if (sf_command(data->file, SFC_GET_FORMAT_INFO, &fi, sizeof(fi)) == 0 && fi.name)
|
||||||
|
pw_properties_set(data->props, PW_KEY_MEDIA_FORMAT, fi.name);
|
||||||
|
|
||||||
|
s = pw_properties_get(data->props, PW_KEY_MEDIA_TITLE);
|
||||||
|
t = pw_properties_get(data->props, PW_KEY_MEDIA_ARTIST);
|
||||||
|
if (s && t)
|
||||||
|
pw_properties_setf(data->props, PW_KEY_MEDIA_NAME,
|
||||||
|
"'%s' / '%s'", s, t);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int setup_sndfile(struct data *data)
|
static int setup_sndfile(struct data *data)
|
||||||
{
|
{
|
||||||
SF_INFO info;
|
SF_INFO info;
|
||||||
|
|
@ -1179,6 +1225,7 @@ static int setup_sndfile(struct data *data)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fill_properties(data);
|
||||||
}
|
}
|
||||||
data->samplesize = sf_format_samplesize(info.format);
|
data->samplesize = sf_format_samplesize(info.format);
|
||||||
data->stride = data->samplesize * data->channels;
|
data->stride = data->samplesize * data->channels;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue