move global handler to object
This commit is contained in:
parent
400c681575
commit
fdf99cc485
|
@ -206,7 +206,10 @@ type AacencParam struct {
|
|||
AdtsUsed int16
|
||||
}
|
||||
|
||||
var handle C.VO_HANDLE
|
||||
// Encoder Thread-safe
|
||||
type Encoder struct {
|
||||
handle C.VO_HANDLE
|
||||
}
|
||||
|
||||
// Errors.
|
||||
var (
|
||||
|
@ -265,52 +268,57 @@ func ErrorFromResult(r uint) error {
|
|||
}
|
||||
}
|
||||
|
||||
// New encoder
|
||||
func New() *Encoder {
|
||||
return &Encoder{}
|
||||
}
|
||||
|
||||
// Init - init the audio codec module and return codec handle.
|
||||
func Init(vtype int32) uint {
|
||||
func (e *Encoder) Init(vtype int32) uint {
|
||||
cvtype := (C.VO_AUDIO_CODINGTYPE)(vtype)
|
||||
ret := C.voAACEncInit(&handle, cvtype, nil)
|
||||
ret := C.voAACEncInit(&e.handle, cvtype, nil)
|
||||
v := (uint)(ret)
|
||||
return v
|
||||
}
|
||||
|
||||
// SetInputData - set input audio data.
|
||||
func SetInputData(pinput *VoCodecBuffer) uint {
|
||||
func (e *Encoder) SetInputData(pinput *VoCodecBuffer) uint {
|
||||
cpinput := pinput.cptr()
|
||||
ret := C.voAACEncSetInputData(handle, cpinput)
|
||||
ret := C.voAACEncSetInputData(e.handle, cpinput)
|
||||
v := (uint)(ret)
|
||||
return v
|
||||
}
|
||||
|
||||
// GetOutputData - get the outut audio data.
|
||||
func GetOutputData(poutbuffer *VoCodecBuffer, poutinfo *VoAudioOutputinfo) uint {
|
||||
func (e *Encoder) GetOutputData(poutbuffer *VoCodecBuffer, poutinfo *VoAudioOutputinfo) uint {
|
||||
cpoutbuffer := poutbuffer.cptr()
|
||||
cpoutinfo := poutinfo.cptr()
|
||||
ret := C.voAACEncGetOutputData(handle, cpoutbuffer, cpoutinfo)
|
||||
ret := C.voAACEncGetOutputData(e.handle, cpoutbuffer, cpoutinfo)
|
||||
v := (uint)(ret)
|
||||
return v
|
||||
}
|
||||
|
||||
// SetParam - set the parameter for the specified param ID.
|
||||
func SetParam(uparamid int, pdata unsafe.Pointer) uint {
|
||||
func (e *Encoder) SetParam(uparamid int, pdata unsafe.Pointer) uint {
|
||||
cuparamid := (C.VO_S32)(uparamid)
|
||||
cpdata := (C.VO_PTR)(pdata)
|
||||
ret := C.voAACEncSetParam(handle, cuparamid, cpdata)
|
||||
ret := C.voAACEncSetParam(e.handle, cuparamid, cpdata)
|
||||
v := (uint)(ret)
|
||||
return v
|
||||
}
|
||||
|
||||
// GetParam - get the parameter for the specified param ID.
|
||||
func GetParam(uparamid int, pdata unsafe.Pointer) uint {
|
||||
func (e *Encoder) GetParam(uparamid int, pdata unsafe.Pointer) uint {
|
||||
cuparamid := (C.VO_S32)(uparamid)
|
||||
cpdata := (C.VO_PTR)(pdata)
|
||||
ret := C.voAACEncGetParam(handle, cuparamid, cpdata)
|
||||
ret := C.voAACEncGetParam(e.handle, cuparamid, cpdata)
|
||||
v := (uint)(ret)
|
||||
return v
|
||||
}
|
||||
|
||||
// Uninit - uninit the Codec.
|
||||
func Uninit() uint {
|
||||
ret := C.voAACEncUninit(handle)
|
||||
func (e *Encoder) Uninit() uint {
|
||||
ret := C.voAACEncUninit(e.handle)
|
||||
v := (uint)(ret)
|
||||
return v
|
||||
}
|
||||
|
|
17
encode.go
17
encode.go
|
@ -7,7 +7,7 @@ import (
|
|||
"io"
|
||||
"unsafe"
|
||||
|
||||
"github.com/gen2brain/aac-go/aacenc"
|
||||
"github.com/aam335/aac-go/aacenc"
|
||||
)
|
||||
|
||||
// Options represent encoding options.
|
||||
|
@ -22,8 +22,8 @@ type Options struct {
|
|||
|
||||
// Encoder type.
|
||||
type Encoder struct {
|
||||
w io.Writer
|
||||
|
||||
w io.Writer
|
||||
aacEnc *aacenc.Encoder
|
||||
insize int
|
||||
inbuf []byte
|
||||
outbuf []byte
|
||||
|
@ -33,12 +33,13 @@ type Encoder struct {
|
|||
func NewEncoder(w io.Writer, opts *Options) (e *Encoder, err error) {
|
||||
e = &Encoder{}
|
||||
e.w = w
|
||||
e.aacEnc = aacenc.New()
|
||||
|
||||
if opts.BitRate == 0 {
|
||||
opts.BitRate = 64000
|
||||
}
|
||||
|
||||
ret := aacenc.Init(aacenc.VoAudioCodingAac)
|
||||
ret := e.aacEnc.Init(aacenc.VoAudioCodingAac)
|
||||
err = aacenc.ErrorFromResult(ret)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -50,7 +51,7 @@ func NewEncoder(w io.Writer, opts *Options) (e *Encoder, err error) {
|
|||
params.NChannels = int16(opts.NumChannels)
|
||||
params.AdtsUsed = 1
|
||||
|
||||
ret = aacenc.SetParam(aacenc.VoPidAacEncparam, unsafe.Pointer(¶ms))
|
||||
ret = e.aacEnc.SetParam(aacenc.VoPidAacEncparam, unsafe.Pointer(¶ms))
|
||||
err = aacenc.ErrorFromResult(ret)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -85,7 +86,7 @@ func (e *Encoder) Encode(r io.Reader) (err error) {
|
|||
input.Buffer = C.CBytes(e.inbuf)
|
||||
input.Length = uint64(n)
|
||||
|
||||
ret := aacenc.SetInputData(&input)
|
||||
ret := e.aacEnc.SetInputData(&input)
|
||||
err = aacenc.ErrorFromResult(ret)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -94,7 +95,7 @@ func (e *Encoder) Encode(r io.Reader) (err error) {
|
|||
output.Buffer = C.CBytes(e.outbuf)
|
||||
output.Length = uint64(len(e.outbuf))
|
||||
|
||||
ret = aacenc.GetOutputData(&output, &outinfo)
|
||||
ret = e.aacEnc.GetOutputData(&output, &outinfo)
|
||||
err = aacenc.ErrorFromResult(ret)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -111,6 +112,6 @@ func (e *Encoder) Encode(r io.Reader) (err error) {
|
|||
|
||||
// Close closes encoder.
|
||||
func (e *Encoder) Close() error {
|
||||
ret := aacenc.Uninit()
|
||||
ret := e.aacEnc.Uninit()
|
||||
return aacenc.ErrorFromResult(ret)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue