Skip to main content

dynlink_nvidia_encode/
error.rs

1// Copyright (C) The Strand-Braid Authors
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4use crate::NvInt;
5use thiserror::Error;
6
7#[derive(Error, Debug)]
8pub enum NvencError {
9    #[error("dynamic library `{dynlib}` could not be loaded: `{source}`")]
10    DynLibLoadError {
11        dynlib: String,
12        source: libloading::Error,
13    },
14    #[error("NvEnc returned code `{status}`: {message} at {fname}:{line_num}")]
15    ErrCode {
16        status: NvInt,
17        fname: &'static str,
18        line_num: u32,
19        message: &'static str,
20    },
21    #[error("Name `{name}` could not be opened")]
22    NameFFIError { name: String },
23    #[error("Name `{name}` could not be opened: `{source}`")]
24    NameFFIError2 {
25        name: String,
26        source: libloading::Error,
27    },
28    #[error("Unable to compute image size")]
29    UnableToComputeSize {},
30    #[error("Encode configuration required")]
31    EncodeConfigRequired {},
32}
33
34pub fn code_to_string(code: crate::ffi::_NVENCSTATUS::Type) -> &'static str {
35    use crate::ffi::_NVENCSTATUS::*;
36    match code {
37        NV_ENC_SUCCESS => "NV_ENC_SUCCESS",
38        NV_ENC_ERR_NO_ENCODE_DEVICE => "NV_ENC_ERR_NO_ENCODE_DEVICE",
39        NV_ENC_ERR_UNSUPPORTED_DEVICE => "NV_ENC_ERR_UNSUPPORTED_DEVICE",
40        NV_ENC_ERR_INVALID_ENCODERDEVICE => "NV_ENC_ERR_INVALID_ENCODERDEVICE",
41        NV_ENC_ERR_INVALID_DEVICE => "NV_ENC_ERR_INVALID_DEVICE",
42        NV_ENC_ERR_DEVICE_NOT_EXIST => "NV_ENC_ERR_DEVICE_NOT_EXIST",
43        NV_ENC_ERR_INVALID_PTR => "NV_ENC_ERR_INVALID_PTR",
44        NV_ENC_ERR_INVALID_EVENT => "NV_ENC_ERR_INVALID_EVENT",
45        NV_ENC_ERR_INVALID_PARAM => "NV_ENC_ERR_INVALID_PARAM",
46        NV_ENC_ERR_INVALID_CALL => "NV_ENC_ERR_INVALID_CALL",
47        NV_ENC_ERR_OUT_OF_MEMORY => "NV_ENC_ERR_OUT_OF_MEMORY",
48        NV_ENC_ERR_ENCODER_NOT_INITIALIZED => "NV_ENC_ERR_ENCODER_NOT_INITIALIZED",
49        NV_ENC_ERR_UNSUPPORTED_PARAM => "NV_ENC_ERR_UNSUPPORTED_PARAM",
50        NV_ENC_ERR_LOCK_BUSY => "NV_ENC_ERR_LOCK_BUSY",
51        NV_ENC_ERR_NOT_ENOUGH_BUFFER => "NV_ENC_ERR_NOT_ENOUGH_BUFFER",
52        NV_ENC_ERR_INVALID_VERSION => "NV_ENC_ERR_INVALID_VERSION",
53        NV_ENC_ERR_MAP_FAILED => "NV_ENC_ERR_MAP_FAILED",
54        NV_ENC_ERR_NEED_MORE_INPUT => "NV_ENC_ERR_NEED_MORE_INPUT",
55        NV_ENC_ERR_ENCODER_BUSY => "NV_ENC_ERR_ENCODER_BUSY",
56        NV_ENC_ERR_EVENT_NOT_REGISTERD => "NV_ENC_ERR_EVENT_NOT_REGISTERD",
57        NV_ENC_ERR_GENERIC => "NV_ENC_ERR_GENERIC",
58        NV_ENC_ERR_INCOMPATIBLE_CLIENT_KEY => "NV_ENC_ERR_INCOMPATIBLE_CLIENT_KEY",
59        NV_ENC_ERR_UNIMPLEMENTED => "NV_ENC_ERR_UNIMPLEMENTED",
60        NV_ENC_ERR_RESOURCE_REGISTER_FAILED => "NV_ENC_ERR_RESOURCE_REGISTER_FAILED",
61        NV_ENC_ERR_RESOURCE_NOT_REGISTERED => "NV_ENC_ERR_RESOURCE_NOT_REGISTERED",
62        NV_ENC_ERR_RESOURCE_NOT_MAPPED => "NV_ENC_ERR_RESOURCE_NOT_MAPPED",
63        _ => "unknown error",
64    }
65}