]> Sergey Matveev's repositories - go-opus.git/commitdiff
refactor: remove unnecessary callback passing
authorHraban Luyat <hraban@0brg.net>
Fri, 10 Jul 2020 08:44:22 +0000 (09:44 +0100)
committerHraban Luyat <hraban@0brg.net>
Fri, 10 Jul 2020 08:44:22 +0000 (09:44 +0100)
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.

callbacks.c
stream.go

index 5645f30ddfee04b5ee6be70ab1a79834cf311cc8..d966f8c4e1bc916e78e76484542ece427651cc73 100644 (file)
@@ -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);
 }
index 60f99e0ad515537a8d3684fcef9b088c5f6c7d6e..46e30fa56e92db4b9a3c0750a7d51777a506faa4 100644 (file)
--- a/stream.go
+++ b/stream.go
@@ -16,8 +16,7 @@ import (
 #include <stdint.h>
 #include <string.h>
 
-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)
        }