xref: /aosp_15_r20/external/crosvm/devices/src/virtio/video/vda.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2021 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 //! Utility features shared by both the decoder and encoder VDA backends.
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker use crate::virtio::video::error::VideoError;
8*bb4ee6a4SAndroid Build Coastguard Worker use crate::virtio::video::format::Profile;
9*bb4ee6a4SAndroid Build Coastguard Worker 
10*bb4ee6a4SAndroid Build Coastguard Worker /// Transparent convertion from libvda error to VideoError backend failure.
11*bb4ee6a4SAndroid Build Coastguard Worker impl From<libvda::Error> for VideoError {
from(error: libvda::Error) -> Self12*bb4ee6a4SAndroid Build Coastguard Worker     fn from(error: libvda::Error) -> Self {
13*bb4ee6a4SAndroid Build Coastguard Worker         VideoError::BackendFailure(error.into())
14*bb4ee6a4SAndroid Build Coastguard Worker     }
15*bb4ee6a4SAndroid Build Coastguard Worker }
16*bb4ee6a4SAndroid Build Coastguard Worker 
17*bb4ee6a4SAndroid Build Coastguard Worker macro_rules! impl_libvda_conversion {
18*bb4ee6a4SAndroid Build Coastguard Worker     ( $( ( $x:ident, $y:ident ) ),* ) => {
19*bb4ee6a4SAndroid Build Coastguard Worker         pub fn from_libvda_profile(p: libvda::Profile) -> Option<Self> {
20*bb4ee6a4SAndroid Build Coastguard Worker             match p {
21*bb4ee6a4SAndroid Build Coastguard Worker                 $(libvda::Profile::$x => Some(Self::$y),)*
22*bb4ee6a4SAndroid Build Coastguard Worker                 _ => None
23*bb4ee6a4SAndroid Build Coastguard Worker             }
24*bb4ee6a4SAndroid Build Coastguard Worker         }
25*bb4ee6a4SAndroid Build Coastguard Worker 
26*bb4ee6a4SAndroid Build Coastguard Worker         #[cfg(feature = "video-encoder")]
27*bb4ee6a4SAndroid Build Coastguard Worker         pub fn to_libvda_profile(self) -> Option<libvda::Profile> {
28*bb4ee6a4SAndroid Build Coastguard Worker             match self {
29*bb4ee6a4SAndroid Build Coastguard Worker                 $(Self::$y => Some(libvda::Profile::$x),)*
30*bb4ee6a4SAndroid Build Coastguard Worker                 _ => None
31*bb4ee6a4SAndroid Build Coastguard Worker             }
32*bb4ee6a4SAndroid Build Coastguard Worker         }
33*bb4ee6a4SAndroid Build Coastguard Worker     }
34*bb4ee6a4SAndroid Build Coastguard Worker }
35*bb4ee6a4SAndroid Build Coastguard Worker 
36*bb4ee6a4SAndroid Build Coastguard Worker impl Profile {
37*bb4ee6a4SAndroid Build Coastguard Worker     impl_libvda_conversion!(
38*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileBaseline, H264Baseline),
39*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileMain, H264Main),
40*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileExtended, H264Extended),
41*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileHigh, H264High),
42*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileHigh10Profile, H264High10),
43*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileHigh422Profile, H264High422),
44*bb4ee6a4SAndroid Build Coastguard Worker         (
45*bb4ee6a4SAndroid Build Coastguard Worker             H264ProfileHigh444PredictiveProfile,
46*bb4ee6a4SAndroid Build Coastguard Worker             H264High444PredictiveProfile
47*bb4ee6a4SAndroid Build Coastguard Worker         ),
48*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileScalableBaseline, H264ScalableBaseline),
49*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileScalableHigh, H264ScalableHigh),
50*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileStereoHigh, H264StereoHigh),
51*bb4ee6a4SAndroid Build Coastguard Worker         (H264ProfileMultiviewHigh, H264MultiviewHigh),
52*bb4ee6a4SAndroid Build Coastguard Worker         (HevcProfileMain, HevcMain),
53*bb4ee6a4SAndroid Build Coastguard Worker         (HevcProfileMain10, HevcMain10),
54*bb4ee6a4SAndroid Build Coastguard Worker         (HevcProfileMainStillPicture, HevcMainStillPicture),
55*bb4ee6a4SAndroid Build Coastguard Worker         (VP8, VP8Profile0),
56*bb4ee6a4SAndroid Build Coastguard Worker         (VP9Profile0, VP9Profile0),
57*bb4ee6a4SAndroid Build Coastguard Worker         (VP9Profile1, VP9Profile1),
58*bb4ee6a4SAndroid Build Coastguard Worker         (VP9Profile2, VP9Profile2),
59*bb4ee6a4SAndroid Build Coastguard Worker         (VP9Profile3, VP9Profile3)
60*bb4ee6a4SAndroid Build Coastguard Worker     );
61*bb4ee6a4SAndroid Build Coastguard Worker }
62