1
1
mirror of https://github.com/wader/fq.git synced 2024-12-25 06:12:30 +03:00
fq/format/flac/flac_picture.go

64 lines
1.4 KiB
Go

package flac
import (
"github.com/wader/fq/format"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/interp"
"github.com/wader/fq/pkg/scalar"
)
var images decode.Group
var pictureTypeNames = scalar.UToSymStr{
0: "Other",
1: "32x32_pixels",
2: "other_file_icon",
3: "cover_front)",
4: "cover_back",
5: "leaflet_page",
6: "media",
7: "lead_artist",
8: "artist",
9: "conductor",
10: "band",
11: "composer",
12: "lyricist",
13: "recording_location",
14: "during_recording",
15: "during_performance",
16: "movie",
17: "a_bright_colored_fish",
18: "illustration",
19: "artist_logotype",
20: "publisher_logotype",
}
func init() {
interp.RegisterFormat(decode.Format{
Name: format.FLAC_PICTURE,
Description: "FLAC metadatablock picture",
DecodeFn: pictureDecode,
Dependencies: []decode.Dependency{
{Names: []string{format.IMAGE}, Group: &images},
},
})
}
func pictureDecode(d *decode.D, _ any) any {
lenStr := func(name string) {
l := d.FieldU32(name + "_length")
d.FieldUTF8(name, int(l))
}
d.FieldU32("picture_type", pictureTypeNames)
lenStr("mime")
lenStr("description")
d.FieldU32("width")
d.FieldU32("height")
d.FieldU32("color_depth")
d.FieldU32("number_of_index_colors")
pictureLen := d.FieldU32("picture_length")
d.FieldFormatOrRawLen("picture_data", int64(pictureLen)*8, images, nil)
return nil
}