1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2020 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker //! Errors that can happen in LibVDA. 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Worker use std::error; 8*bb4ee6a4SAndroid Build Coastguard Worker use std::fmt; 9*bb4ee6a4SAndroid Build Coastguard Worker use std::fmt::Display; 10*bb4ee6a4SAndroid Build Coastguard Worker 11*bb4ee6a4SAndroid Build Coastguard Worker use super::format; 12*bb4ee6a4SAndroid Build Coastguard Worker use crate::decode; 13*bb4ee6a4SAndroid Build Coastguard Worker use crate::encode; 14*bb4ee6a4SAndroid Build Coastguard Worker 15*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug)] 16*bb4ee6a4SAndroid Build Coastguard Worker pub enum Error { 17*bb4ee6a4SAndroid Build Coastguard Worker // Encode session error. The error code provided is specific 18*bb4ee6a4SAndroid Build Coastguard Worker // to the implementation type (`VeaImplType`). 19*bb4ee6a4SAndroid Build Coastguard Worker EncodeSessionFailure(i32), 20*bb4ee6a4SAndroid Build Coastguard Worker EncodeSessionInitFailure(encode::Config), 21*bb4ee6a4SAndroid Build Coastguard Worker GetCapabilitiesFailure, 22*bb4ee6a4SAndroid Build Coastguard Worker InstanceInitFailure, 23*bb4ee6a4SAndroid Build Coastguard Worker InvalidCapabilities(String), 24*bb4ee6a4SAndroid Build Coastguard Worker LibVdaFailure(decode::Response), 25*bb4ee6a4SAndroid Build Coastguard Worker ReadEventFailure(std::io::Error), 26*bb4ee6a4SAndroid Build Coastguard Worker SessionIdAlreadyUsed(u32), 27*bb4ee6a4SAndroid Build Coastguard Worker SessionInitFailure(format::Profile), 28*bb4ee6a4SAndroid Build Coastguard Worker SessionNotFound(u32), 29*bb4ee6a4SAndroid Build Coastguard Worker UnknownPixelFormat(u32), 30*bb4ee6a4SAndroid Build Coastguard Worker UnknownProfile(i32), 31*bb4ee6a4SAndroid Build Coastguard Worker } 32*bb4ee6a4SAndroid Build Coastguard Worker 33*bb4ee6a4SAndroid Build Coastguard Worker pub type Result<T> = std::result::Result<T, Error>; 34*bb4ee6a4SAndroid Build Coastguard Worker 35*bb4ee6a4SAndroid Build Coastguard Worker impl error::Error for Error {} 36*bb4ee6a4SAndroid Build Coastguard Worker 37*bb4ee6a4SAndroid Build Coastguard Worker impl Display for Error { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result38*bb4ee6a4SAndroid Build Coastguard Worker fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 39*bb4ee6a4SAndroid Build Coastguard Worker use self::Error::*; 40*bb4ee6a4SAndroid Build Coastguard Worker 41*bb4ee6a4SAndroid Build Coastguard Worker match self { 42*bb4ee6a4SAndroid Build Coastguard Worker EncodeSessionFailure(e) => write!(f, "encode session error: {}", e), 43*bb4ee6a4SAndroid Build Coastguard Worker EncodeSessionInitFailure(c) => { 44*bb4ee6a4SAndroid Build Coastguard Worker write!(f, "failed to initialize encode session with config {:?}", c) 45*bb4ee6a4SAndroid Build Coastguard Worker } 46*bb4ee6a4SAndroid Build Coastguard Worker GetCapabilitiesFailure => write!(f, "failed to get capabilities"), 47*bb4ee6a4SAndroid Build Coastguard Worker InstanceInitFailure => write!(f, "failed to initialize VDA instance"), 48*bb4ee6a4SAndroid Build Coastguard Worker InvalidCapabilities(e) => write!(f, "obtained capabilities are invalid: {}", e), 49*bb4ee6a4SAndroid Build Coastguard Worker LibVdaFailure(e) => write!(f, "error happened in libvda: {}", e), 50*bb4ee6a4SAndroid Build Coastguard Worker ReadEventFailure(e) => write!(f, "failed to read event: {}", e), 51*bb4ee6a4SAndroid Build Coastguard Worker SessionInitFailure(p) => write!(f, "failed to initialize decode session with {:?}", p), 52*bb4ee6a4SAndroid Build Coastguard Worker SessionIdAlreadyUsed(id) => write!(f, "session_id {} is already used", id), 53*bb4ee6a4SAndroid Build Coastguard Worker SessionNotFound(id) => write!(f, "no session has session_id {}", id), 54*bb4ee6a4SAndroid Build Coastguard Worker UnknownPixelFormat(p) => write!(f, "unknown pixel format: {}", p), 55*bb4ee6a4SAndroid Build Coastguard Worker UnknownProfile(p) => write!(f, "unknown profile: {}", p), 56*bb4ee6a4SAndroid Build Coastguard Worker } 57*bb4ee6a4SAndroid Build Coastguard Worker } 58*bb4ee6a4SAndroid Build Coastguard Worker } 59