cimport libav as lib
from libc.stdint cimport int64_t, uint8_t


cdef int pyio_read(void *opaque, uint8_t *buf, int buf_size) noexcept nogil
cdef int pyio_write(void *opaque, const uint8_t *buf, int buf_size) noexcept nogil
cdef int64_t pyio_seek(void *opaque, int64_t offset, int whence) noexcept nogil
cdef int pyio_close_gil(lib.AVIOContext *pb)
cdef int pyio_close_custom_gil(lib.AVIOContext *pb)

cdef class PyIOFile:
    # File-like source.
    cdef readonly object file
    cdef object fread
    cdef object fwrite
    cdef object fseek
    cdef object ftell
    cdef object fclose

    # Custom IO for above.
    cdef lib.AVIOContext *iocontext
    cdef unsigned char *buffer
    cdef int64_t pos
    cdef bint pos_is_valid
