flacgo/meta/application.go

39 lines
839 B
Go

package meta
import (
"encoding/binary"
"io/ioutil"
)
// Application contains third party application specific data.
//
// ref: https://www.xiph.org/flac/format.html#metadata_block_application
type Application struct {
// Registered application ID.
//
// ref: https://www.xiph.org/flac/id.html
ID uint32
// Application data.
Data []byte
}
// parseApplication reads and parses the body of an Application metadata block.
func (block *Block) parseApplication() error {
// 32 bits: ID.
app := new(Application)
block.Body = app
err := binary.Read(block.lr, binary.BigEndian, &app.ID)
if err != nil {
return unexpected(err)
}
// Check if the Application block only contains an ID.
if block.Length == 4 {
return nil
}
// (block length)-4 bytes: Data.
app.Data, err = ioutil.ReadAll(block.lr)
return unexpected(err)
}