From 393f6956138954a48444669e9d91f90d3e2ac2d0 Mon Sep 17 00:00:00 2001 From: nareix Date: Tue, 12 Jul 2016 11:14:38 +0800 Subject: [PATCH] avutil: add audio encoder/decoder for handlers --- av/avutil/avutil.go | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/av/avutil/avutil.go b/av/avutil/avutil.go index 14d5862..d1dc0ae 100644 --- a/av/avutil/avutil.go +++ b/av/avutil/avutil.go @@ -50,6 +50,8 @@ type RegisterHandler struct { UrlDemuxer func(string)(bool,av.DemuxCloser,error) UrlReader func(string)(bool,io.ReadCloser,error) Probe func([]byte)bool + AudioEncoder func(av.CodecType)(av.AudioEncoder,error) + AudioDecoder func(av.CodecData)(av.AudioDecoder,error) } type Handlers struct { @@ -84,6 +86,30 @@ func (self *Handlers) createUrl(u *url.URL, uri string) (w io.WriteCloser, err e 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) { for _, handler := range self.handlers { if handler.UrlDemuxer != nil { @@ -174,10 +200,6 @@ func (self *Handlers) Create(uri string) (muxer av.MuxCloser, err error) { var DefaultHandlers = &Handlers{} -func AddHandler(fn func(*RegisterHandler)) { - DefaultHandlers.Add(fn) -} - func Open(url string) (demuxer av.DemuxCloser, err error) { return DefaultHandlers.Open(url) }