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