avutil: add audio encoder/decoder for handlers

This commit is contained in:
nareix 2016-07-12 11:14:38 +08:00
parent 512de0943f
commit 393f695613

View File

@ -50,6 +50,8 @@ type RegisterHandler struct {
UrlDemuxer func(string)(bool,av.DemuxCloser,error) UrlDemuxer func(string)(bool,av.DemuxCloser,error)
UrlReader func(string)(bool,io.ReadCloser,error) UrlReader func(string)(bool,io.ReadCloser,error)
Probe func([]byte)bool Probe func([]byte)bool
AudioEncoder func(av.CodecType)(av.AudioEncoder,error)
AudioDecoder func(av.CodecData)(av.AudioDecoder,error)
} }
type Handlers struct { type Handlers struct {
@ -84,6 +86,30 @@ func (self *Handlers) createUrl(u *url.URL, uri string) (w io.WriteCloser, err e
return return
} }
func (self *Handlers) NewAudioEncoder(typ av.CodecType) (enc av.AudioEncoder, err error) {
for _, handler := range self.handlers {
if handler.AudioEncoder != nil {
if enc, _ = handler.AudioEncoder(typ); enc != nil {
return
}
}
}
err = fmt.Errorf("avutil: encoder", typ, "not found")
return
}
func (self *Handlers) NewAudioDecoder(codec av.CodecData) (dec av.AudioDecoder, err error) {
for _, handler := range self.handlers {
if handler.AudioDecoder != nil {
if dec, _ = handler.AudioDecoder(codec); dec != nil {
return
}
}
}
err = fmt.Errorf("avutil: decoder", codec.Type(), "not found")
return
}
func (self *Handlers) Open(uri string) (demuxer av.DemuxCloser, err error) { func (self *Handlers) Open(uri string) (demuxer av.DemuxCloser, err error) {
for _, handler := range self.handlers { for _, handler := range self.handlers {
if handler.UrlDemuxer != nil { if handler.UrlDemuxer != nil {
@ -174,10 +200,6 @@ func (self *Handlers) Create(uri string) (muxer av.MuxCloser, err error) {
var DefaultHandlers = &Handlers{} var DefaultHandlers = &Handlers{}
func AddHandler(fn func(*RegisterHandler)) {
DefaultHandlers.Add(fn)
}
func Open(url string) (demuxer av.DemuxCloser, err error) { func Open(url string) (demuxer av.DemuxCloser, err error) {
return DefaultHandlers.Open(url) return DefaultHandlers.Open(url)
} }