fix #18: skip noop decoder

This commit is contained in:
Emmm Monster
2021-11-11 23:43:20 +08:00
parent 6fd5bd5863
commit 3f3980de38
9 changed files with 65 additions and 50 deletions

View File

@ -7,12 +7,24 @@ import (
type NewDecoderFunc func([]byte) Decoder
var decoderRegistry = make(map[string][]NewDecoderFunc)
type decoderItem struct {
noop bool
decoder NewDecoderFunc
}
func RegisterDecoder(ext string, dispatchFunc NewDecoderFunc) {
decoderRegistry[ext] = append(decoderRegistry[ext], dispatchFunc)
var decoderRegistry = make(map[string][]decoderItem)
func RegisterDecoder(ext string, noop bool, dispatchFunc NewDecoderFunc) {
decoderRegistry[ext] = append(decoderRegistry[ext],
decoderItem{noop: noop, decoder: dispatchFunc})
}
func GetDecoder(filename string) []NewDecoderFunc {
func GetDecoder(filename string, skipNoop bool) (rs []NewDecoderFunc) {
ext := strings.ToLower(strings.TrimLeft(filepath.Ext(filename), "."))
return decoderRegistry[ext]
for _, dec := range decoderRegistry[ext] {
if skipNoop && dec.noop {
continue
}
rs = append(rs, dec.decoder)
}
return
}

View File

@ -45,11 +45,11 @@ func (d RawDecoder) GetMeta() Meta {
}
func init() {
RegisterDecoder("mp3", NewRawDecoder)
RegisterDecoder("flac", NewRawDecoder)
RegisterDecoder("ogg", NewRawDecoder)
RegisterDecoder("m4a", NewRawDecoder)
RegisterDecoder("wav", NewRawDecoder)
RegisterDecoder("wma", NewRawDecoder)
RegisterDecoder("aac", NewRawDecoder)
RegisterDecoder("mp3", true, NewRawDecoder)
RegisterDecoder("flac", true, NewRawDecoder)
RegisterDecoder("ogg", true, NewRawDecoder)
RegisterDecoder("m4a", true, NewRawDecoder)
RegisterDecoder("wav", true, NewRawDecoder)
RegisterDecoder("wma", true, NewRawDecoder)
RegisterDecoder("aac", true, NewRawDecoder)
}