cimport libav as lib from libc.stdint cimport uint8_t from uuid import uuid4 cdef void key_free(void *opaque, uint8_t *data) noexcept nogil: cdef char *name = <char *>data with gil: opaque_container.pop(name) cdef class OpaqueContainer: """A container that holds references to Python objects, indexed by uuid""" def __cinit__(self): self._by_name = {} cdef lib.AVBufferRef *add(self, v): cdef bytes uuid = str(uuid4()).encode("utf-8") cdef lib.AVBufferRef *ref = lib.av_buffer_create(uuid, len(uuid), &key_free, NULL, 0) self._by_name[uuid] = v return ref cdef object get(self, bytes name): return self._by_name.get(name) cdef object pop(self, bytes name): return self._by_name.pop(name) cdef opaque_container = OpaqueContainer()
Memory