xref: /aosp_15_r20/external/crosvm/media/libvda/src/error.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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