xref: /aosp_15_r20/external/crosvm/media/libvda/tests/decode_tests.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 //! Integration tests using LibVDA fake decode implemenation.
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker #![cfg(any(target_os = "android", target_os = "linux"))]
8*bb4ee6a4SAndroid Build Coastguard Worker 
9*bb4ee6a4SAndroid Build Coastguard Worker use libvda::decode::*;
10*bb4ee6a4SAndroid Build Coastguard Worker use libvda::*;
11*bb4ee6a4SAndroid Build Coastguard Worker 
create_vda_instance() -> VdaInstance12*bb4ee6a4SAndroid Build Coastguard Worker fn create_vda_instance() -> VdaInstance {
13*bb4ee6a4SAndroid Build Coastguard Worker     VdaInstance::new(VdaImplType::Fake).expect("failed to create VDAInstance")
14*bb4ee6a4SAndroid Build Coastguard Worker }
15*bb4ee6a4SAndroid Build Coastguard Worker 
16*bb4ee6a4SAndroid Build Coastguard Worker #[test]
17*bb4ee6a4SAndroid Build Coastguard Worker #[cfg_attr(feature = "libvda-stub", ignore = "Ignored when using libvda-stub")]
test_create_instance()18*bb4ee6a4SAndroid Build Coastguard Worker fn test_create_instance() {
19*bb4ee6a4SAndroid Build Coastguard Worker     let instance = create_vda_instance();
20*bb4ee6a4SAndroid Build Coastguard Worker     let caps = instance.get_capabilities();
21*bb4ee6a4SAndroid Build Coastguard Worker 
22*bb4ee6a4SAndroid Build Coastguard Worker     assert_ne!(caps.input_formats.len(), 0);
23*bb4ee6a4SAndroid Build Coastguard Worker     assert_ne!(caps.output_formats.len(), 0);
24*bb4ee6a4SAndroid Build Coastguard Worker }
25*bb4ee6a4SAndroid Build Coastguard Worker 
26*bb4ee6a4SAndroid Build Coastguard Worker #[test]
27*bb4ee6a4SAndroid Build Coastguard Worker #[cfg_attr(feature = "libvda-stub", ignore = "Ignored when using libvda-stub")]
test_initialize_decode_session()28*bb4ee6a4SAndroid Build Coastguard Worker fn test_initialize_decode_session() {
29*bb4ee6a4SAndroid Build Coastguard Worker     let instance = create_vda_instance();
30*bb4ee6a4SAndroid Build Coastguard Worker     let _session = instance
31*bb4ee6a4SAndroid Build Coastguard Worker         .open_session(Profile::VP8)
32*bb4ee6a4SAndroid Build Coastguard Worker         .expect("failed to open a session for VP8");
33*bb4ee6a4SAndroid Build Coastguard Worker }
34*bb4ee6a4SAndroid Build Coastguard Worker 
35*bb4ee6a4SAndroid Build Coastguard Worker #[test]
36*bb4ee6a4SAndroid Build Coastguard Worker #[cfg_attr(feature = "libvda-stub", ignore = "Ignored when using libvda-stub")]
test_decode_and_get_picture_ready_fake()37*bb4ee6a4SAndroid Build Coastguard Worker fn test_decode_and_get_picture_ready_fake() {
38*bb4ee6a4SAndroid Build Coastguard Worker     let instance = create_vda_instance();
39*bb4ee6a4SAndroid Build Coastguard Worker     let mut session = instance
40*bb4ee6a4SAndroid Build Coastguard Worker         .open_session(Profile::VP8)
41*bb4ee6a4SAndroid Build Coastguard Worker         .expect("failed to open a session");
42*bb4ee6a4SAndroid Build Coastguard Worker 
43*bb4ee6a4SAndroid Build Coastguard Worker     // Call decode() with dummy arguments.
44*bb4ee6a4SAndroid Build Coastguard Worker     let fake_bitstream_id = 12345;
45*bb4ee6a4SAndroid Build Coastguard Worker     session
46*bb4ee6a4SAndroid Build Coastguard Worker         .decode(
47*bb4ee6a4SAndroid Build Coastguard Worker             fake_bitstream_id,
48*bb4ee6a4SAndroid Build Coastguard Worker             1, // fd
49*bb4ee6a4SAndroid Build Coastguard Worker             0, // offset
50*bb4ee6a4SAndroid Build Coastguard Worker             0, // bytes_used
51*bb4ee6a4SAndroid Build Coastguard Worker         )
52*bb4ee6a4SAndroid Build Coastguard Worker         .expect("failed to send a decode request");
53*bb4ee6a4SAndroid Build Coastguard Worker 
54*bb4ee6a4SAndroid Build Coastguard Worker     // Since we are using the fake backend,
55*bb4ee6a4SAndroid Build Coastguard Worker     // we must get a event immediately after calling decode().
56*bb4ee6a4SAndroid Build Coastguard Worker     match session.read_event() {
57*bb4ee6a4SAndroid Build Coastguard Worker         Ok(Event::PictureReady { bitstream_id, .. }) => {
58*bb4ee6a4SAndroid Build Coastguard Worker             assert_eq!(bitstream_id, fake_bitstream_id);
59*bb4ee6a4SAndroid Build Coastguard Worker         }
60*bb4ee6a4SAndroid Build Coastguard Worker         Ok(event) => panic!("Obtained event is not PictureReady but {:?}", event),
61*bb4ee6a4SAndroid Build Coastguard Worker         Err(msg) => panic!("{}", msg),
62*bb4ee6a4SAndroid Build Coastguard Worker     }
63*bb4ee6a4SAndroid Build Coastguard Worker }
64