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