diff --git a/cgo/ffmpeg/audio.go b/cgo/ffmpeg/audio.go index 8ba9baf..0e02934 100644 --- a/cgo/ffmpeg/audio.go +++ b/cgo/ffmpeg/audio.go @@ -17,6 +17,7 @@ import ( "fmt" "time" "github.com/nareix/joy4/av" + "github.com/nareix/joy4/av/avutil" "github.com/nareix/joy4/codec/aacparser" ) @@ -277,11 +278,7 @@ func (self *AudioEncoder) Setup() (err error) { return } -func (self *AudioEncoder) CodecData() (codec av.AudioCodecData) { - return self.codecData -} - -func (self *AudioEncoder) encodeOne(frame av.AudioFrame) (gotpkt bool, pkt []byte, err error) { +func (self *AudioEncoder) prepare() (err error) { ff := &self.ff.ff if ff.frame == nil { @@ -290,6 +287,20 @@ func (self *AudioEncoder) encodeOne(frame av.AudioFrame) (gotpkt bool, pkt []byt } } + return +} + +func (self *AudioEncoder) CodecData() (codec av.AudioCodecData) { + return self.codecData +} + +func (self *AudioEncoder) encodeOne(frame av.AudioFrame) (gotpkt bool, pkt []byte, err error) { + if err = self.prepare(); err != nil { + return + } + + ff := &self.ff.ff + cpkt := C.AVPacket{} cgotpkt := C.int(0) audioFrameAssignToFF(frame, ff.frame) @@ -670,3 +681,12 @@ func (self audioCodecData) PacketDuration(data []byte) (dur time.Duration, err e return } +func AudioCodecHandler(h *avutil.RegisterHandler) { + h.AudioDecoder = func(codec av.AudioCodecData) (av.AudioDecoder, error) { + return NewAudioDecoder(codec) + } + h.AudioEncoder = func(typ av.CodecType) (av.AudioEncoder, error) { + return NewAudioEncoderByCodecType(typ) + } +} +