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 encode implementation.
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::encode::*;
10*bb4ee6a4SAndroid Build Coastguard Worker use libvda::*;
11*bb4ee6a4SAndroid Build Coastguard Worker
create_vea_instance() -> VeaInstance12*bb4ee6a4SAndroid Build Coastguard Worker fn create_vea_instance() -> VeaInstance {
13*bb4ee6a4SAndroid Build Coastguard Worker VeaInstance::new(VeaImplType::Fake).expect("failed to create VeaInstance")
14*bb4ee6a4SAndroid Build Coastguard Worker }
15*bb4ee6a4SAndroid Build Coastguard Worker
create_config() -> Config16*bb4ee6a4SAndroid Build Coastguard Worker fn create_config() -> Config {
17*bb4ee6a4SAndroid Build Coastguard Worker Config {
18*bb4ee6a4SAndroid Build Coastguard Worker input_format: PixelFormat::YV12,
19*bb4ee6a4SAndroid Build Coastguard Worker input_visible_height: 320,
20*bb4ee6a4SAndroid Build Coastguard Worker input_visible_width: 192,
21*bb4ee6a4SAndroid Build Coastguard Worker output_profile: Profile::H264ProfileBaseline,
22*bb4ee6a4SAndroid Build Coastguard Worker bitrate: Bitrate {
23*bb4ee6a4SAndroid Build Coastguard Worker mode: BitrateMode::CBR,
24*bb4ee6a4SAndroid Build Coastguard Worker target: 100,
25*bb4ee6a4SAndroid Build Coastguard Worker peak: 0,
26*bb4ee6a4SAndroid Build Coastguard Worker },
27*bb4ee6a4SAndroid Build Coastguard Worker initial_framerate: None,
28*bb4ee6a4SAndroid Build Coastguard Worker h264_output_level: None,
29*bb4ee6a4SAndroid Build Coastguard Worker }
30*bb4ee6a4SAndroid Build Coastguard Worker }
31*bb4ee6a4SAndroid Build Coastguard Worker
32*bb4ee6a4SAndroid Build Coastguard Worker #[test]
33*bb4ee6a4SAndroid Build Coastguard Worker #[cfg_attr(feature = "libvda-stub", ignore = "Ignored when using libvda-stub")]
test_create_instance()34*bb4ee6a4SAndroid Build Coastguard Worker fn test_create_instance() {
35*bb4ee6a4SAndroid Build Coastguard Worker let instance = create_vea_instance();
36*bb4ee6a4SAndroid Build Coastguard Worker let caps = instance.get_capabilities();
37*bb4ee6a4SAndroid Build Coastguard Worker
38*bb4ee6a4SAndroid Build Coastguard Worker assert_ne!(caps.input_formats.len(), 0);
39*bb4ee6a4SAndroid Build Coastguard Worker assert_ne!(caps.output_formats.len(), 0);
40*bb4ee6a4SAndroid Build Coastguard Worker }
41*bb4ee6a4SAndroid Build Coastguard Worker
42*bb4ee6a4SAndroid Build Coastguard Worker #[test]
43*bb4ee6a4SAndroid Build Coastguard Worker #[cfg_attr(feature = "libvda-stub", ignore = "Ignored when using libvda-stub")]
test_initialize_encode_session()44*bb4ee6a4SAndroid Build Coastguard Worker fn test_initialize_encode_session() {
45*bb4ee6a4SAndroid Build Coastguard Worker let instance = create_vea_instance();
46*bb4ee6a4SAndroid Build Coastguard Worker let config = create_config();
47*bb4ee6a4SAndroid Build Coastguard Worker
48*bb4ee6a4SAndroid Build Coastguard Worker let _session = instance
49*bb4ee6a4SAndroid Build Coastguard Worker .open_session(config)
50*bb4ee6a4SAndroid Build Coastguard Worker .expect("failed to open a session");
51*bb4ee6a4SAndroid Build Coastguard Worker }
52*bb4ee6a4SAndroid Build Coastguard Worker
53*bb4ee6a4SAndroid Build Coastguard Worker #[test]
54*bb4ee6a4SAndroid Build Coastguard Worker #[cfg_attr(feature = "libvda-stub", ignore = "Ignored when using libvda-stub")]
test_encode_and_get_buffer_back()55*bb4ee6a4SAndroid Build Coastguard Worker fn test_encode_and_get_buffer_back() {
56*bb4ee6a4SAndroid Build Coastguard Worker let instance = create_vea_instance();
57*bb4ee6a4SAndroid Build Coastguard Worker let config = create_config();
58*bb4ee6a4SAndroid Build Coastguard Worker let mut session = instance
59*bb4ee6a4SAndroid Build Coastguard Worker .open_session(config)
60*bb4ee6a4SAndroid Build Coastguard Worker .expect("failed to open a session");
61*bb4ee6a4SAndroid Build Coastguard Worker
62*bb4ee6a4SAndroid Build Coastguard Worker // Call encode() with dummy arguments.
63*bb4ee6a4SAndroid Build Coastguard Worker let fake_input_buffer_id = 12345;
64*bb4ee6a4SAndroid Build Coastguard Worker let fake_planes = vec![];
65*bb4ee6a4SAndroid Build Coastguard Worker session
66*bb4ee6a4SAndroid Build Coastguard Worker .encode(
67*bb4ee6a4SAndroid Build Coastguard Worker fake_input_buffer_id,
68*bb4ee6a4SAndroid Build Coastguard Worker 1, // fd
69*bb4ee6a4SAndroid Build Coastguard Worker &fake_planes, // planes
70*bb4ee6a4SAndroid Build Coastguard Worker 0, // timestamp
71*bb4ee6a4SAndroid Build Coastguard Worker false, // force_keyframe
72*bb4ee6a4SAndroid Build Coastguard Worker )
73*bb4ee6a4SAndroid Build Coastguard Worker .expect("failed to send an encode request");
74*bb4ee6a4SAndroid Build Coastguard Worker
75*bb4ee6a4SAndroid Build Coastguard Worker // Since we are using the fake backend, we should get back
76*bb4ee6a4SAndroid Build Coastguard Worker // the input buffer right away.
77*bb4ee6a4SAndroid Build Coastguard Worker match session.read_event() {
78*bb4ee6a4SAndroid Build Coastguard Worker Ok(Event::ProcessedInputBuffer(returned_input_buffer_id)) => {
79*bb4ee6a4SAndroid Build Coastguard Worker assert_eq!(fake_input_buffer_id, returned_input_buffer_id);
80*bb4ee6a4SAndroid Build Coastguard Worker }
81*bb4ee6a4SAndroid Build Coastguard Worker Ok(event) => panic!("Obtained event is not ProcessedInputBuffer but {:?}", event),
82*bb4ee6a4SAndroid Build Coastguard Worker Err(msg) => panic!("{}", msg),
83*bb4ee6a4SAndroid Build Coastguard Worker }
84*bb4ee6a4SAndroid Build Coastguard Worker }
85*bb4ee6a4SAndroid Build Coastguard Worker
86*bb4ee6a4SAndroid Build Coastguard Worker #[test]
87*bb4ee6a4SAndroid Build Coastguard Worker #[cfg_attr(feature = "libvda-stub", ignore = "Ignored when using libvda-stub")]
test_use_output_buffer_and_get_buffer_back()88*bb4ee6a4SAndroid Build Coastguard Worker fn test_use_output_buffer_and_get_buffer_back() {
89*bb4ee6a4SAndroid Build Coastguard Worker let instance = create_vea_instance();
90*bb4ee6a4SAndroid Build Coastguard Worker let config = create_config();
91*bb4ee6a4SAndroid Build Coastguard Worker let mut session = instance
92*bb4ee6a4SAndroid Build Coastguard Worker .open_session(config)
93*bb4ee6a4SAndroid Build Coastguard Worker .expect("failed to open a session");
94*bb4ee6a4SAndroid Build Coastguard Worker
95*bb4ee6a4SAndroid Build Coastguard Worker // Call use_output_buffer with dummy arguments.
96*bb4ee6a4SAndroid Build Coastguard Worker let fake_output_buffer_id = 12345;
97*bb4ee6a4SAndroid Build Coastguard Worker session
98*bb4ee6a4SAndroid Build Coastguard Worker .use_output_buffer(
99*bb4ee6a4SAndroid Build Coastguard Worker fake_output_buffer_id,
100*bb4ee6a4SAndroid Build Coastguard Worker 2, // fd
101*bb4ee6a4SAndroid Build Coastguard Worker 0, // offset
102*bb4ee6a4SAndroid Build Coastguard Worker 0, // size
103*bb4ee6a4SAndroid Build Coastguard Worker )
104*bb4ee6a4SAndroid Build Coastguard Worker .expect("failed to send use_output_buffer request");
105*bb4ee6a4SAndroid Build Coastguard Worker
106*bb4ee6a4SAndroid Build Coastguard Worker // Since we are using the fake backend, we should get back
107*bb4ee6a4SAndroid Build Coastguard Worker // the input buffer right away.
108*bb4ee6a4SAndroid Build Coastguard Worker match session.read_event() {
109*bb4ee6a4SAndroid Build Coastguard Worker Ok(Event::ProcessedOutputBuffer {
110*bb4ee6a4SAndroid Build Coastguard Worker output_buffer_id: returned_output_buffer_id,
111*bb4ee6a4SAndroid Build Coastguard Worker ..
112*bb4ee6a4SAndroid Build Coastguard Worker }) => {
113*bb4ee6a4SAndroid Build Coastguard Worker assert_eq!(fake_output_buffer_id, returned_output_buffer_id);
114*bb4ee6a4SAndroid Build Coastguard Worker }
115*bb4ee6a4SAndroid Build Coastguard Worker Ok(event) => panic!(
116*bb4ee6a4SAndroid Build Coastguard Worker "Obtained event is not ProcessedOutputBuffer but {:?}",
117*bb4ee6a4SAndroid Build Coastguard Worker event
118*bb4ee6a4SAndroid Build Coastguard Worker ),
119*bb4ee6a4SAndroid Build Coastguard Worker Err(msg) => panic!("{}", msg),
120*bb4ee6a4SAndroid Build Coastguard Worker }
121*bb4ee6a4SAndroid Build Coastguard Worker }
122