pub trait Encoder {
    type Session: EncoderSession;
    // Required methods
    fn query_capabilities(&self) -> Result<EncoderCapabilities, VideoError>;
    fn start_session(
        &mut self,
        config: SessionConfig,
    ) -> Result<Self::Session, VideoError>;
    fn stop_session(&mut self, session: Self::Session) -> Result<(), VideoError>;
}