move global handler to object

This commit is contained in:
aam335 2018-11-29 09:34:29 +03:00
parent 400c681575
commit fdf99cc485
2 changed files with 30 additions and 21 deletions

View file

@ -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
}

View file

@ -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(&params))
ret = e.aacEnc.SetParam(aacenc.VoPidAacEncparam, unsafe.Pointer(&params))
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)
}