cimport libav as lib

from av.codec.context cimport CodecContext
from av.video.format cimport VideoFormat
from av.video.frame cimport VideoFrame
from av.video.reformatter cimport VideoReformatter


# The get_format callback in AVCodecContext is called by the decoder to pick a format out of a list.
# When we want accelerated decoding, we need to figure out ahead of time what the format should be,
# and find a way to pass that into our callback so we can return it to the decoder. We use the 'opaque'
# user data field in AVCodecContext for that. This is the struct we store a pointer to in that field.
cdef struct AVCodecPrivateData:
    lib.AVPixelFormat hardware_pix_fmt
    bint allow_software_fallback


cdef class VideoCodecContext(CodecContext):
    cdef AVCodecPrivateData _private_data
    cdef readonly VideoReformatter reformatter
    cdef VideoFrame next_frame
    cdef VideoFrame _encode_upload_frame(self, VideoFrame vframe)
