From: Hraban Luyat Date: Fri, 10 Jul 2020 08:44:22 +0000 (+0100) Subject: refactor: remove unnecessary callback passing X-Git-Tag: v2.0.0~17 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=f10c96b8f445642fa58f25294e4a37376fe6ff64;p=go-opus.git refactor: remove unnecessary callback passing Since we now have a full function wrapper for libopusfile init anyway we can directly pass the callback struct pointer from there, instead of making it go through Go first. --- diff --git a/callbacks.c b/callbacks.c index 5645f30..d966f8c 100644 --- a/callbacks.c +++ b/callbacks.c @@ -11,9 +11,7 @@ // Defined in Go. Uses the same signature as Go, no need for proxy function. int go_readcallback(void *p, unsigned char *buf, int nbytes); -// Allocated once, never moved. Pointer to this is safe for passing around -// between Go and C. -struct OpusFileCallbacks callbacks = { +static struct OpusFileCallbacks callbacks = { .read = go_readcallback, }; @@ -23,7 +21,7 @@ struct OpusFileCallbacks callbacks = { // we have this wrapper function to shush it. // https://groups.google.com/g/golang-nuts/c/995uZyRPKlU OggOpusFile * -my_open_callbacks(uintptr_t p, const OpusFileCallbacks *cb, int *error) +my_open_callbacks(uintptr_t p, int *error) { - return op_open_callbacks((void *)p, cb, NULL, 0, error); + return op_open_callbacks((void *)p, &callbacks, NULL, 0, error); } diff --git a/stream.go b/stream.go index 60f99e0..46e30fa 100644 --- a/stream.go +++ b/stream.go @@ -16,8 +16,7 @@ import ( #include #include -extern struct OpusFileCallbacks callbacks; -OggOpusFile *my_open_callbacks(uintptr_t p, const OpusFileCallbacks *cb, int *error); +OggOpusFile *my_open_callbacks(uintptr_t p, int *error); */ import "C" @@ -105,7 +104,7 @@ func (s *Stream) Init(read io.Reader) error { // called. streams.Save(s) defer streams.Del(s) - oggfile := C.my_open_callbacks(C.uintptr_t(s.id), &C.callbacks, &errno) + oggfile := C.my_open_callbacks(C.uintptr_t(s.id), &errno) if errno != 0 { return StreamError(errno) }