From fb6c20e4249827fa3b7a8b17d9d295f39ba66bb9 Mon Sep 17 00:00:00 2001 From: nareix Date: Tue, 12 Jul 2016 12:55:44 +0800 Subject: [PATCH] interface change CodecData()(CodecData,error) handler.AudioDecoder(av.AudioCodecData) --- av/av.go | 2 +- av/avutil/avutil.go | 4 ++-- av/transcode/transcode.go | 14 +++++++++++--- cgo/ffmpeg/audio.go | 8 ++++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/av/av.go b/av/av.go index b52f7f7..e3a45a6 100644 --- a/av/av.go +++ b/av/av.go @@ -263,7 +263,7 @@ func (self AudioFrame) Concat(in AudioFrame) (out AudioFrame) { } type AudioEncoder interface { - CodecData() AudioCodecData + CodecData() (AudioCodecData, error) Encode(AudioFrame) ([][]byte, error) //Flush() ([]Packet, error) Close() diff --git a/av/avutil/avutil.go b/av/avutil/avutil.go index d1dc0ae..5087c27 100644 --- a/av/avutil/avutil.go +++ b/av/avutil/avutil.go @@ -51,7 +51,7 @@ type RegisterHandler struct { 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) + AudioDecoder func(av.AudioCodecData)(av.AudioDecoder,error) } type Handlers struct { @@ -98,7 +98,7 @@ func (self *Handlers) NewAudioEncoder(typ av.CodecType) (enc av.AudioEncoder, er return } -func (self *Handlers) NewAudioDecoder(codec av.CodecData) (dec av.AudioDecoder, err error) { +func (self *Handlers) NewAudioDecoder(codec av.AudioCodecData) (dec av.AudioDecoder, err error) { for _, handler := range self.handlers { if handler.AudioDecoder != nil { if dec, _ = handler.AudioDecoder(codec); dec != nil { diff --git a/av/transcode/transcode.go b/av/transcode/transcode.go index 1ff60c5..8e44599 100644 --- a/av/transcode/transcode.go +++ b/av/transcode/transcode.go @@ -42,7 +42,9 @@ func NewTranscoder(streams []av.CodecData, options Options) (_self *Transcoder, return } ts.timeline = &pktque.Timeline{} - ts.codec = enc.CodecData() + if ts.codec, err = enc.CodecData(); err != nil { + return + } ts.aencodec = ts.codec.(av.AudioCodecData) ts.adecodec = stream.(av.AudioCodecData) ts.aenc = enc @@ -168,7 +170,10 @@ func (self *Muxer) WritePacket(pkt av.Packet) (err error) { } func (self *Muxer) Close() (err error) { - return self.transcoder.Close() + if self.transcoder != nil { + return self.transcoder.Close() + } + return } type Demuxer struct { @@ -220,5 +225,8 @@ func (self *Demuxer) Streams() (streams []av.CodecData, err error) { } func (self *Demuxer) Close() (err error) { - return self.transcoder.Close() + if self.transcoder != nil { + return self.transcoder.Close() + } + return } diff --git a/cgo/ffmpeg/audio.go b/cgo/ffmpeg/audio.go index 0e02934..f462f58 100644 --- a/cgo/ffmpeg/audio.go +++ b/cgo/ffmpeg/audio.go @@ -290,8 +290,12 @@ func (self *AudioEncoder) prepare() (err error) { return } -func (self *AudioEncoder) CodecData() (codec av.AudioCodecData) { - return self.codecData +func (self *AudioEncoder) CodecData() (codec av.AudioCodecData, err error) { + if err = self.prepare(); err != nil { + return + } + codec = self.codecData + return } func (self *AudioEncoder) encodeOne(frame av.AudioFrame) (gotpkt bool, pkt []byte, err error) {