diff options
author | android-build-team Robot | 2017-10-08 02:28:28 -0500 |
---|---|---|
committer | android-build-team Robot | 2017-10-08 02:28:28 -0500 |
commit | eb92c84f6fd2e7312f43b51d652642d008cef7dc (patch) | |
tree | 748b9910d6edfd26aeb8534c171b1d17088cff47 | |
parent | 806f87250326c6cabca8913cb95689b8aa506328 (diff) | |
parent | 3021f1fafbfb1a4b464effa543aee381f42d8080 (diff) | |
download | platform-hardware-interfaces-eb92c84f6fd2e7312f43b51d652642d008cef7dc.tar.gz platform-hardware-interfaces-eb92c84f6fd2e7312f43b51d652642d008cef7dc.tar.xz platform-hardware-interfaces-eb92c84f6fd2e7312f43b51d652642d008cef7dc.zip |
Snap for 4383937 from 3021f1fafbfb1a4b464effa543aee381f42d8080 to oc-mr1-release
Change-Id: Ia2f03abe28796187082d7d7a71f79e42a8eb6640
10 files changed, 1030 insertions, 440 deletions
diff --git a/cas/1.0/vts/functional/Android.bp b/cas/1.0/vts/functional/Android.bp index d601235d..872bb2c5 100644 --- a/cas/1.0/vts/functional/Android.bp +++ b/cas/1.0/vts/functional/Android.bp | |||
@@ -18,6 +18,12 @@ cc_test { | |||
18 | name: "VtsHalCasV1_0TargetTest", | 18 | name: "VtsHalCasV1_0TargetTest", |
19 | defaults: ["VtsHalTargetTestDefaults"], | 19 | defaults: ["VtsHalTargetTestDefaults"], |
20 | srcs: ["VtsHalCasV1_0TargetTest.cpp"], | 20 | srcs: ["VtsHalCasV1_0TargetTest.cpp"], |
21 | static_libs: ["android.hardware.cas@1.0"], | 21 | static_libs: [ |
22 | "android.hardware.cas@1.0", | ||
23 | "android.hardware.cas.native@1.0", | ||
24 | "android.hidl.allocator@1.0", | ||
25 | "android.hidl.memory@1.0", | ||
26 | "libhidlmemory", | ||
27 | ], | ||
22 | } | 28 | } |
23 | 29 | ||
diff --git a/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp b/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp index f346bae9..062ee203 100644 --- a/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp +++ b/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp | |||
@@ -22,30 +22,192 @@ | |||
22 | #include <android/hardware/cas/1.0/ICasListener.h> | 22 | #include <android/hardware/cas/1.0/ICasListener.h> |
23 | #include <android/hardware/cas/1.0/IDescramblerBase.h> | 23 | #include <android/hardware/cas/1.0/IDescramblerBase.h> |
24 | #include <android/hardware/cas/1.0/IMediaCasService.h> | 24 | #include <android/hardware/cas/1.0/IMediaCasService.h> |
25 | #include <android/hardware/cas/1.0/types.h> | ||
26 | #include <android/hardware/cas/native/1.0/IDescrambler.h> | ||
27 | #include <android/hardware/cas/native/1.0/types.h> | ||
28 | #include <android/hidl/allocator/1.0/IAllocator.h> | ||
29 | #include <android/hidl/memory/1.0/IMapper.h> | ||
25 | #include <hidl/HidlSupport.h> | 30 | #include <hidl/HidlSupport.h> |
26 | #include <hidl/HidlTransportSupport.h> | 31 | #include <hidl/HidlTransportSupport.h> |
32 | #include <hidl/Status.h> | ||
33 | #include <hidlmemory/mapping.h> | ||
34 | #include <utils/Condition.h> | ||
35 | #include <utils/Mutex.h> | ||
27 | 36 | ||
28 | #include <cinttypes> | ||
29 | #include <utility> | ||
30 | |||
31 | // CA System Ids used for testing | ||
32 | #define CLEAR_KEY_SYSTEM_ID 0xF6D8 | 37 | #define CLEAR_KEY_SYSTEM_ID 0xF6D8 |
33 | #define INVALID_SYSTEM_ID 0 | 38 | #define INVALID_SYSTEM_ID 0 |
39 | #define WAIT_TIMEOUT 3000000000 | ||
40 | |||
41 | #define PROVISION_STR \ | ||
42 | "{ " \ | ||
43 | " \"id\": 21140844, " \ | ||
44 | " \"name\": \"Test Title\", " \ | ||
45 | " \"lowercase_organization_name\": \"Android\", " \ | ||
46 | " \"asset_key\": { " \ | ||
47 | " \"encryption_key\": \"nezAr3CHFrmBR9R8Tedotw==\" " \ | ||
48 | " }, " \ | ||
49 | " \"cas_type\": 1, " \ | ||
50 | " \"track_types\": [ ] " \ | ||
51 | "} " | ||
34 | 52 | ||
35 | using android::Condition; | 53 | using android::Condition; |
36 | using android::hardware::cas::V1_0::ICas; | 54 | using android::hardware::cas::V1_0::ICas; |
37 | using android::hardware::cas::V1_0::ICasListener; | 55 | using android::hardware::cas::V1_0::ICasListener; |
38 | using android::hardware::cas::V1_0::IDescramblerBase; | 56 | using android::hardware::cas::V1_0::IDescramblerBase; |
57 | using android::hardware::cas::native::V1_0::IDescrambler; | ||
58 | using android::hardware::cas::native::V1_0::SubSample; | ||
59 | using android::hardware::cas::native::V1_0::SharedBuffer; | ||
60 | using android::hardware::cas::native::V1_0::DestinationBuffer; | ||
61 | using android::hardware::cas::native::V1_0::BufferType; | ||
62 | using android::hardware::cas::native::V1_0::ScramblingControl; | ||
39 | using android::hardware::cas::V1_0::IMediaCasService; | 63 | using android::hardware::cas::V1_0::IMediaCasService; |
40 | using android::hardware::cas::V1_0::HidlCasPluginDescriptor; | 64 | using android::hardware::cas::V1_0::HidlCasPluginDescriptor; |
41 | using android::hardware::Void; | 65 | using android::hardware::Void; |
42 | using android::hardware::hidl_vec; | 66 | using android::hardware::hidl_vec; |
67 | using android::hardware::hidl_string; | ||
68 | using android::hardware::hidl_handle; | ||
69 | using android::hardware::hidl_memory; | ||
43 | using android::hardware::Return; | 70 | using android::hardware::Return; |
71 | using android::hardware::cas::V1_0::Status; | ||
72 | using android::hidl::allocator::V1_0::IAllocator; | ||
73 | using android::hidl::memory::V1_0::IMemory; | ||
74 | using android::hidl::memory::V1_0::IMapper; | ||
44 | using android::Mutex; | 75 | using android::Mutex; |
45 | using android::sp; | 76 | using android::sp; |
46 | 77 | ||
47 | namespace { | 78 | namespace { |
48 | 79 | ||
80 | const uint8_t kEcmBinaryBuffer[] = { | ||
81 | 0x00, 0x00, 0x01, 0xf0, 0x00, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0x00, | ||
82 | 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x27, 0x10, 0x02, 0x00, | ||
83 | 0x01, 0x77, 0x01, 0x42, 0x95, 0x6c, 0x0e, 0xe3, 0x91, 0xbc, 0xfd, 0x05, 0xb1, 0x60, 0x4f, | ||
84 | 0x17, 0x82, 0xa4, 0x86, 0x9b, 0x23, 0x56, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, | ||
85 | 0x27, 0x10, 0x02, 0x00, 0x01, 0x77, 0x01, 0x42, 0x95, 0x6c, 0xd7, 0x43, 0x62, 0xf8, 0x1c, | ||
86 | 0x62, 0x19, 0x05, 0xc7, 0x3a, 0x42, 0xcd, 0xfd, 0xd9, 0x13, 0x48, | ||
87 | }; | ||
88 | |||
89 | const SubSample kSubSamples[] = {{162, 0}, {0, 184}, {0, 184}}; | ||
90 | |||
91 | const uint8_t kInBinaryBuffer[] = { | ||
92 | 0x00, 0x00, 0x00, 0x01, 0x09, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x67, 0x42, 0xc0, 0x1e, 0xdb, 0x01, | ||
93 | 0x40, 0x16, 0xec, 0x04, 0x40, 0x00, 0x00, 0x03, 0x00, 0x40, 0x00, 0x00, 0x0f, 0x03, 0xc5, 0x8b, | ||
94 | 0xb8, 0x00, 0x00, 0x00, 0x01, 0x68, 0xca, 0x8c, 0xb2, 0x00, 0x00, 0x01, 0x06, 0x05, 0xff, 0xff, | ||
95 | 0x70, 0xdc, 0x45, 0xe9, 0xbd, 0xe6, 0xd9, 0x48, 0xb7, 0x96, 0x2c, 0xd8, 0x20, 0xd9, 0x23, 0xee, | ||
96 | 0xef, 0x78, 0x32, 0x36, 0x34, 0x20, 0x2d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x31, 0x34, 0x32, | ||
97 | 0x20, 0x2d, 0x20, 0x48, 0x2e, 0x32, 0x36, 0x34, 0x2f, 0x4d, 0x50, 0x45, 0x47, 0x2d, 0x34, 0x20, | ||
98 | 0x41, 0x56, 0x43, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x20, 0x2d, 0x20, 0x43, 0x6f, 0x70, 0x79, | ||
99 | 0x6c, 0x65, 0x66, 0x74, 0x20, 0x32, 0x30, 0x30, 0x33, 0x2d, 0x32, 0x30, 0x31, 0x34, 0x20, 0x2d, | ||
100 | 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x76, 0x69, 0x64, 0x65, | ||
101 | 0x6f, 0x6c, 0x61, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x32, 0x36, 0x34, 0x2e, 0x68, 0x74, | ||
102 | 0x6d, 0x6c, 0x6e, 0x45, 0x21, 0x82, 0x38, 0xf0, 0x9d, 0x7d, 0x96, 0xe6, 0x94, 0xae, 0xe2, 0x87, | ||
103 | 0x8f, 0x04, 0x49, 0xe5, 0xf6, 0x8c, 0x8b, 0x9a, 0x10, 0x18, 0xba, 0x94, 0xe9, 0x22, 0x31, 0x04, | ||
104 | 0x7e, 0x60, 0x5b, 0xc4, 0x24, 0x00, 0x90, 0x62, 0x0d, 0xdc, 0x85, 0x74, 0x75, 0x78, 0xd0, 0x14, | ||
105 | 0x08, 0xcb, 0x02, 0x1d, 0x7d, 0x9d, 0x34, 0xe8, 0x81, 0xb9, 0xf7, 0x09, 0x28, 0x79, 0x29, 0x8d, | ||
106 | 0xe3, 0x14, 0xed, 0x5f, 0xca, 0xaf, 0xf4, 0x1c, 0x49, 0x15, 0xe1, 0x80, 0x29, 0x61, 0x76, 0x80, | ||
107 | 0x43, 0xf8, 0x58, 0x53, 0x40, 0xd7, 0x31, 0x6d, 0x61, 0x81, 0x41, 0xe9, 0x77, 0x9f, 0x9c, 0xe1, | ||
108 | 0x6d, 0xf2, 0xee, 0xd9, 0xc8, 0x67, 0xd2, 0x5f, 0x48, 0x73, 0xe3, 0x5c, 0xcd, 0xa7, 0x45, 0x58, | ||
109 | 0xbb, 0xdd, 0x28, 0x1d, 0x68, 0xfc, 0xb4, 0xc6, 0xf6, 0x92, 0xf6, 0x30, 0x03, 0xaa, 0xe4, 0x32, | ||
110 | 0xf6, 0x34, 0x51, 0x4b, 0x0f, 0x8c, 0xf9, 0xac, 0x98, 0x22, 0xfb, 0x49, 0xc8, 0xbf, 0xca, 0x8c, | ||
111 | 0x80, 0x86, 0x5d, 0xd7, 0xa4, 0x52, 0xb1, 0xd9, 0xa6, 0x04, 0x4e, 0xb3, 0x2d, 0x1f, 0xb8, 0x35, | ||
112 | 0xcc, 0x45, 0x6d, 0x9c, 0x20, 0xa7, 0xa4, 0x34, 0x59, 0x72, 0xe3, 0xae, 0xba, 0x49, 0xde, 0xd1, | ||
113 | 0xaa, 0xee, 0x3d, 0x77, 0xfc, 0x5d, 0xc6, 0x1f, 0x9d, 0xac, 0xc2, 0x15, 0x66, 0xb8, 0xe1, 0x54, | ||
114 | 0x4e, 0x74, 0x93, 0xdb, 0x9a, 0x24, 0x15, 0x6e, 0x20, 0xa3, 0x67, 0x3e, 0x5a, 0x24, 0x41, 0x5e, | ||
115 | 0xb0, 0xe6, 0x35, 0x87, 0x1b, 0xc8, 0x7a, 0xf9, 0x77, 0x65, 0xe0, 0x01, 0xf2, 0x4c, 0xe4, 0x2b, | ||
116 | 0xa9, 0x64, 0x96, 0x96, 0x0b, 0x46, 0xca, 0xea, 0x79, 0x0e, 0x78, 0xa3, 0x5f, 0x43, 0xfc, 0x47, | ||
117 | 0x6a, 0x12, 0xfa, 0xc4, 0x33, 0x0e, 0x88, 0x1c, 0x19, 0x3a, 0x00, 0xc3, 0x4e, 0xb5, 0xd8, 0xfa, | ||
118 | 0x8e, 0xf1, 0xbc, 0x3d, 0xb2, 0x7e, 0x50, 0x8d, 0x67, 0xc3, 0x6b, 0xed, 0xe2, 0xea, 0xa6, 0x1f, | ||
119 | 0x25, 0x24, 0x7c, 0x94, 0x74, 0x50, 0x49, 0xe3, 0xc6, 0x58, 0x2e, 0xfd, 0x28, 0xb4, 0xc6, 0x73, | ||
120 | 0xb1, 0x53, 0x74, 0x27, 0x94, 0x5c, 0xdf, 0x69, 0xb7, 0xa1, 0xd7, 0xf5, 0xd3, 0x8a, 0x2c, 0x2d, | ||
121 | 0xb4, 0x5e, 0x8a, 0x16, 0x14, 0x54, 0x64, 0x6e, 0x00, 0x6b, 0x11, 0x59, 0x8a, 0x63, 0x38, 0x80, | ||
122 | 0x76, 0xc3, 0xd5, 0x59, 0xf7, 0x3f, 0xd2, 0xfa, 0xa5, 0xca, 0x82, 0xff, 0x4a, 0x62, 0xf0, 0xe3, | ||
123 | 0x42, 0xf9, 0x3b, 0x38, 0x27, 0x8a, 0x89, 0xaa, 0x50, 0x55, 0x4b, 0x29, 0xf1, 0x46, 0x7c, 0x75, | ||
124 | 0xef, 0x65, 0xaf, 0x9b, 0x0d, 0x6d, 0xda, 0x25, 0x94, 0x14, 0xc1, 0x1b, 0xf0, 0xc5, 0x4c, 0x24, | ||
125 | 0x0e, 0x65, | ||
126 | }; | ||
127 | |||
128 | const uint8_t kOutRefBinaryBuffer[] = { | ||
129 | 0x00, 0x00, 0x00, 0x01, 0x09, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x67, 0x42, 0xc0, 0x1e, 0xdb, 0x01, | ||
130 | 0x40, 0x16, 0xec, 0x04, 0x40, 0x00, 0x00, 0x03, 0x00, 0x40, 0x00, 0x00, 0x0f, 0x03, 0xc5, 0x8b, | ||
131 | 0xb8, 0x00, 0x00, 0x00, 0x01, 0x68, 0xca, 0x8c, 0xb2, 0x00, 0x00, 0x01, 0x06, 0x05, 0xff, 0xff, | ||
132 | 0x70, 0xdc, 0x45, 0xe9, 0xbd, 0xe6, 0xd9, 0x48, 0xb7, 0x96, 0x2c, 0xd8, 0x20, 0xd9, 0x23, 0xee, | ||
133 | 0xef, 0x78, 0x32, 0x36, 0x34, 0x20, 0x2d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x31, 0x34, 0x32, | ||
134 | 0x20, 0x2d, 0x20, 0x48, 0x2e, 0x32, 0x36, 0x34, 0x2f, 0x4d, 0x50, 0x45, 0x47, 0x2d, 0x34, 0x20, | ||
135 | 0x41, 0x56, 0x43, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x20, 0x2d, 0x20, 0x43, 0x6f, 0x70, 0x79, | ||
136 | 0x6c, 0x65, 0x66, 0x74, 0x20, 0x32, 0x30, 0x30, 0x33, 0x2d, 0x32, 0x30, 0x31, 0x34, 0x20, 0x2d, | ||
137 | 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x76, 0x69, 0x64, 0x65, | ||
138 | 0x6f, 0x6c, 0x61, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x32, 0x36, 0x34, 0x2e, 0x68, 0x74, | ||
139 | 0x6d, 0x6c, 0x20, 0x2d, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x20, 0x63, 0x61, | ||
140 | 0x62, 0x61, 0x63, 0x3d, 0x30, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x32, 0x20, 0x64, 0x65, 0x62, 0x6c, | ||
141 | 0x6f, 0x63, 0x6b, 0x3d, 0x31, 0x3a, 0x30, 0x3a, 0x30, 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, | ||
142 | 0x65, 0x3d, 0x30, 0x78, 0x31, 0x3a, 0x30, 0x78, 0x31, 0x31, 0x31, 0x20, 0x6d, 0x65, 0x3d, 0x68, | ||
143 | 0x65, 0x78, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x3d, 0x37, 0x20, 0x70, 0x73, 0x79, 0x3d, 0x31, | ||
144 | 0x20, 0x70, 0x73, 0x79, 0x5f, 0x72, 0x64, 0x3d, 0x31, 0x2e, 0x30, 0x30, 0x3a, 0x30, 0x2e, 0x30, | ||
145 | 0x30, 0x20, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x3d, 0x31, 0x20, 0x6d, 0x65, | ||
146 | 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x3d, 0x31, 0x36, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, | ||
147 | 0x5f, 0x6d, 0x65, 0x3d, 0x31, 0x20, 0x74, 0x72, 0x65, 0x6c, 0x6c, 0x69, 0x73, 0x3d, 0x31, 0x20, | ||
148 | 0x38, 0x78, 0x38, 0x64, 0x63, 0x74, 0x3d, 0x30, 0x20, 0x63, 0x71, 0x6d, 0x3d, 0x30, 0x20, 0x64, | ||
149 | 0x65, 0x61, 0x64, 0x7a, 0x6f, 0x6e, 0x65, 0x3d, 0x32, 0x31, 0x2c, 0x31, 0x31, 0x20, 0x66, 0x61, | ||
150 | 0x73, 0x74, 0x5f, 0x70, 0x73, 0x6b, 0x69, 0x70, 0x3d, 0x31, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6d, | ||
151 | 0x61, 0x5f, 0x71, 0x70, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x2d, 0x32, 0x20, 0x74, | ||
152 | 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3d, 0x36, 0x30, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x61, 0x68, | ||
153 | 0x65, 0x61, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3d, 0x35, 0x20, 0x73, 0x6c, | ||
154 | 0x69, 0x63, 0x65, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3d, 0x30, 0x20, 0x6e, | ||
155 | 0x72, 0x3d, 0x30, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x3d, 0x31, 0x20, 0x69, | ||
156 | 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x3d, 0x30, 0x20, 0x62, 0x6c, 0x75, 0x72, | ||
157 | 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x3d, 0x30, 0x20, 0x63, 0x6f, 0x6e, 0x73, | ||
158 | 0x74, 0x72, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x61, 0x3d, 0x30, 0x20, | ||
159 | 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x3d, 0x30, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, | ||
160 | 0x70, 0x3d, 0x30, 0x20, 0x6b, 0x65, 0x79, 0x69, 0x6e, 0x74, 0x3d, 0x32, 0x35, 0x30, 0x20, 0x6b, | ||
161 | 0x65, 0x79, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x3d, 0x32, 0x35, 0x20, 0x73, 0x63, 0x65, | ||
162 | 0x6e, 0x65, | ||
163 | }; | ||
164 | |||
165 | class MediaCasListener : public ICasListener { | ||
166 | public: | ||
167 | virtual Return<void> onEvent(int32_t event, int32_t arg, | ||
168 | const hidl_vec<uint8_t>& data) override { | ||
169 | android::Mutex::Autolock autoLock(mMsgLock); | ||
170 | mEvent = event; | ||
171 | mEventArg = arg; | ||
172 | mEventData = data; | ||
173 | |||
174 | mEventReceived = true; | ||
175 | mMsgCondition.signal(); | ||
176 | return Void(); | ||
177 | } | ||
178 | |||
179 | void testEventEcho(sp<ICas>& mediaCas, int32_t& event, int32_t& eventArg, | ||
180 | hidl_vec<uint8_t>& eventData); | ||
181 | |||
182 | private: | ||
183 | int32_t mEvent = -1; | ||
184 | int32_t mEventArg = -1; | ||
185 | bool mEventReceived = false; | ||
186 | hidl_vec<uint8_t> mEventData; | ||
187 | android::Mutex mMsgLock; | ||
188 | android::Condition mMsgCondition; | ||
189 | }; | ||
190 | |||
191 | void MediaCasListener::testEventEcho(sp<ICas>& mediaCas, int32_t& event, int32_t& eventArg, | ||
192 | hidl_vec<uint8_t>& eventData) { | ||
193 | mEventReceived = false; | ||
194 | auto returnStatus = mediaCas->sendEvent(event, eventArg, eventData); | ||
195 | EXPECT_TRUE(returnStatus.isOk()); | ||
196 | EXPECT_EQ(Status::OK, returnStatus); | ||
197 | |||
198 | android::Mutex::Autolock autoLock(mMsgLock); | ||
199 | while (!mEventReceived) { | ||
200 | if (-ETIMEDOUT == mMsgCondition.waitRelative(mMsgLock, WAIT_TIMEOUT)) { | ||
201 | EXPECT_TRUE(false) << "event not received within timeout"; | ||
202 | return; | ||
203 | } | ||
204 | } | ||
205 | |||
206 | EXPECT_EQ(mEvent, event); | ||
207 | EXPECT_EQ(mEventArg, eventArg); | ||
208 | EXPECT_TRUE(mEventData == eventData); | ||
209 | } | ||
210 | |||
49 | class MediaCasHidlTest : public ::testing::VtsHalHidlTargetTestBase { | 211 | class MediaCasHidlTest : public ::testing::VtsHalHidlTargetTestBase { |
50 | public: | 212 | public: |
51 | virtual void SetUp() override { | 213 | virtual void SetUp() override { |
@@ -59,17 +221,104 @@ class MediaCasHidlTest : public ::testing::VtsHalHidlTargetTestBase { | |||
59 | static void description(const std::string& description) { | 221 | static void description(const std::string& description) { |
60 | RecordProperty("description", description); | 222 | RecordProperty("description", description); |
61 | } | 223 | } |
224 | |||
225 | sp<ICas> mMediaCas; | ||
226 | sp<IDescramblerBase> mDescramblerBase; | ||
227 | sp<MediaCasListener> mCasListener; | ||
228 | |||
229 | ::testing::AssertionResult createCasPlugin(int32_t caSystemId); | ||
230 | ::testing::AssertionResult openCasSession(std::vector<uint8_t>* sessionId); | ||
231 | ::testing::AssertionResult descrambleTestInputBuffer(const sp<IDescrambler>& descrambler, | ||
232 | Status* descrambleStatus, | ||
233 | hidl_memory* hidlInMemory); | ||
62 | }; | 234 | }; |
63 | 235 | ||
64 | class MediaCasListener : public ICasListener { | 236 | ::testing::AssertionResult MediaCasHidlTest::createCasPlugin(int32_t caSystemId) { |
65 | public: | 237 | auto status = mService->isSystemIdSupported(caSystemId); |
66 | virtual ::android::hardware::Return<void> onEvent( | 238 | if (!status.isOk() || !status) { |
67 | int32_t event, int32_t arg, const ::android::hardware::hidl_vec<uint8_t>& data) override { | 239 | return ::testing::AssertionFailure(); |
68 | ALOGI("Info: received event: %d, arg: %d, size: %zu", event, arg, data.size()); | 240 | } |
241 | status = mService->isDescramblerSupported(caSystemId); | ||
242 | if (!status.isOk() || !status) { | ||
243 | return ::testing::AssertionFailure(); | ||
244 | } | ||
69 | 245 | ||
70 | return Void(); | 246 | mCasListener = new MediaCasListener(); |
247 | auto pluginStatus = mService->createPlugin(caSystemId, mCasListener); | ||
248 | if (!pluginStatus.isOk()) { | ||
249 | return ::testing::AssertionFailure(); | ||
71 | } | 250 | } |
72 | }; | 251 | mMediaCas = pluginStatus; |
252 | if (mMediaCas == nullptr) { | ||
253 | return ::testing::AssertionFailure(); | ||
254 | } | ||
255 | |||
256 | auto descramblerStatus = mService->createDescrambler(caSystemId); | ||
257 | if (!descramblerStatus.isOk()) { | ||
258 | return ::testing::AssertionFailure(); | ||
259 | } | ||
260 | mDescramblerBase = descramblerStatus; | ||
261 | return ::testing::AssertionResult(mDescramblerBase != nullptr); | ||
262 | } | ||
263 | |||
264 | ::testing::AssertionResult MediaCasHidlTest::openCasSession(std::vector<uint8_t>* sessionId) { | ||
265 | Status sessionStatus; | ||
266 | auto returnVoid = mMediaCas->openSession([&](Status status, const hidl_vec<uint8_t>& id) { | ||
267 | sessionStatus = status; | ||
268 | *sessionId = id; | ||
269 | }); | ||
270 | return ::testing::AssertionResult(returnVoid.isOk() && (Status::OK == sessionStatus)); | ||
271 | } | ||
272 | |||
273 | ::testing::AssertionResult MediaCasHidlTest::descrambleTestInputBuffer( | ||
274 | const sp<IDescrambler>& descrambler, Status* descrambleStatus, hidl_memory* hidlInMemory) { | ||
275 | hidl_vec<SubSample> hidlSubSamples; | ||
276 | hidlSubSamples.setToExternal(const_cast<SubSample*>(kSubSamples), | ||
277 | (sizeof(kSubSamples) / sizeof(SubSample)), false /*own*/); | ||
278 | sp<IAllocator> allocator = IAllocator::getService("ashmem"); | ||
279 | if (nullptr == allocator.get()) { | ||
280 | return ::testing::AssertionFailure(); | ||
281 | } | ||
282 | |||
283 | bool allocateStatus; | ||
284 | auto returnStatus = | ||
285 | allocator->allocate(sizeof(kInBinaryBuffer), [&](bool status, hidl_memory const& mem) { | ||
286 | allocateStatus = status; | ||
287 | *hidlInMemory = mem; | ||
288 | }); | ||
289 | if (!returnStatus.isOk() || !allocateStatus) { | ||
290 | return ::testing::AssertionFailure(); | ||
291 | } | ||
292 | android::sp<IMemory> inMemory = mapMemory(*hidlInMemory); | ||
293 | if (nullptr == inMemory.get()) { | ||
294 | return ::testing::AssertionFailure(); | ||
295 | } | ||
296 | |||
297 | uint8_t* ipBuffer = static_cast<uint8_t*>(static_cast<void*>(inMemory->getPointer())); | ||
298 | memcpy(ipBuffer, kInBinaryBuffer, sizeof(kInBinaryBuffer)); | ||
299 | |||
300 | SharedBuffer srcBuffer = { | ||
301 | .heapBase = *hidlInMemory, .offset = (uint64_t)0, .size = sizeof(kInBinaryBuffer)}; | ||
302 | |||
303 | DestinationBuffer dstBuffer; | ||
304 | dstBuffer.type = BufferType::SHARED_MEMORY; | ||
305 | dstBuffer.nonsecureMemory = srcBuffer; | ||
306 | |||
307 | uint32_t outBytes; | ||
308 | hidl_string detailedError; | ||
309 | auto returnVoid = descrambler->descramble( | ||
310 | ScramblingControl::EVENKEY /*2*/, hidlSubSamples, srcBuffer, 0, dstBuffer, 0, | ||
311 | [&](Status status, uint32_t bytesWritten, const hidl_string& detailedErr) { | ||
312 | *descrambleStatus = status; | ||
313 | outBytes = bytesWritten; | ||
314 | detailedError = detailedErr; | ||
315 | }); | ||
316 | if (!returnVoid.isOk() || *descrambleStatus != Status::OK) { | ||
317 | ALOGI("descramble failed, trans=%s, status=%d, outBytes=%u, error=%s", | ||
318 | returnVoid.description().c_str(), *descrambleStatus, outBytes, detailedError.c_str()); | ||
319 | } | ||
320 | return ::testing::AssertionResult(returnVoid.isOk()); | ||
321 | } | ||
73 | 322 | ||
74 | TEST_F(MediaCasHidlTest, EnumeratePlugins) { | 323 | TEST_F(MediaCasHidlTest, EnumeratePlugins) { |
75 | description("Test enumerate plugins"); | 324 | description("Test enumerate plugins"); |
@@ -87,17 +336,8 @@ TEST_F(MediaCasHidlTest, EnumeratePlugins) { | |||
87 | sp<MediaCasListener> casListener = new MediaCasListener(); | 336 | sp<MediaCasListener> casListener = new MediaCasListener(); |
88 | for (size_t i = 0; i < descriptors.size(); i++) { | 337 | for (size_t i = 0; i < descriptors.size(); i++) { |
89 | int32_t caSystemId = descriptors[i].caSystemId; | 338 | int32_t caSystemId = descriptors[i].caSystemId; |
90 | bool status = mService->isSystemIdSupported(caSystemId); | ||
91 | ASSERT_EQ(status, true); | ||
92 | |||
93 | status = mService->isDescramblerSupported(caSystemId); | ||
94 | ASSERT_EQ(status, true); | ||
95 | 339 | ||
96 | sp<ICas> mediaCas = mService->createPlugin(caSystemId, casListener); | 340 | ASSERT_TRUE(createCasPlugin(caSystemId)); |
97 | ASSERT_NE(mediaCas, nullptr); | ||
98 | |||
99 | sp<IDescramblerBase> descramblerBase = mService->createDescrambler(caSystemId); | ||
100 | ASSERT_NE(descramblerBase, nullptr); | ||
101 | } | 341 | } |
102 | } | 342 | } |
103 | 343 | ||
@@ -108,10 +348,14 @@ TEST_F(MediaCasHidlTest, TestInvalidSystemIdFails) { | |||
108 | ASSERT_FALSE(mService->isSystemIdSupported(INVALID_SYSTEM_ID)); | 348 | ASSERT_FALSE(mService->isSystemIdSupported(INVALID_SYSTEM_ID)); |
109 | ASSERT_FALSE(mService->isDescramblerSupported(INVALID_SYSTEM_ID)); | 349 | ASSERT_FALSE(mService->isDescramblerSupported(INVALID_SYSTEM_ID)); |
110 | 350 | ||
111 | sp<ICas> mediaCas = mService->createPlugin(INVALID_SYSTEM_ID, casListener); | 351 | auto pluginStatus = mService->createPlugin(INVALID_SYSTEM_ID, casListener); |
352 | ASSERT_TRUE(pluginStatus.isOk()); | ||
353 | sp<ICas> mediaCas = pluginStatus; | ||
112 | EXPECT_EQ(mediaCas, nullptr); | 354 | EXPECT_EQ(mediaCas, nullptr); |
113 | 355 | ||
114 | sp<IDescramblerBase> descramblerBase = mService->createDescrambler(INVALID_SYSTEM_ID); | 356 | auto descramblerStatus = mService->createDescrambler(INVALID_SYSTEM_ID); |
357 | ASSERT_TRUE(descramblerStatus.isOk()); | ||
358 | sp<IDescramblerBase> descramblerBase = descramblerStatus; | ||
115 | EXPECT_EQ(descramblerBase, nullptr); | 359 | EXPECT_EQ(descramblerBase, nullptr); |
116 | } | 360 | } |
117 | 361 | ||
@@ -120,7 +364,7 @@ TEST_F(MediaCasHidlTest, TestClearKeyPluginInstalled) { | |||
120 | hidl_vec<HidlCasPluginDescriptor> descriptors; | 364 | hidl_vec<HidlCasPluginDescriptor> descriptors; |
121 | EXPECT_TRUE(mService | 365 | EXPECT_TRUE(mService |
122 | ->enumeratePlugins([&descriptors]( | 366 | ->enumeratePlugins([&descriptors]( |
123 | hidl_vec<HidlCasPluginDescriptor> const& _desc) { descriptors = _desc; }) | 367 | hidl_vec<HidlCasPluginDescriptor> const& desc) { descriptors = desc; }) |
124 | .isOk()); | 368 | .isOk()); |
125 | 369 | ||
126 | if (descriptors.size() == 0) { | 370 | if (descriptors.size() == 0) { |
@@ -137,6 +381,211 @@ TEST_F(MediaCasHidlTest, TestClearKeyPluginInstalled) { | |||
137 | ASSERT_TRUE(false) << "ClearKey plugin not installed"; | 381 | ASSERT_TRUE(false) << "ClearKey plugin not installed"; |
138 | } | 382 | } |
139 | 383 | ||
384 | TEST_F(MediaCasHidlTest, TestClearKeyApis) { | ||
385 | description("Test that valid call sequences succeed"); | ||
386 | |||
387 | ASSERT_TRUE(createCasPlugin(CLEAR_KEY_SYSTEM_ID)); | ||
388 | |||
389 | auto returnStatus = mMediaCas->provision(hidl_string(PROVISION_STR)); | ||
390 | EXPECT_TRUE(returnStatus.isOk()); | ||
391 | EXPECT_EQ(Status::OK, returnStatus); | ||
392 | |||
393 | hidl_vec<uint8_t> hidlPvtData; | ||
394 | hidlPvtData.resize(256); | ||
395 | returnStatus = mMediaCas->setPrivateData(hidlPvtData); | ||
396 | EXPECT_TRUE(returnStatus.isOk()); | ||
397 | EXPECT_EQ(Status::OK, returnStatus); | ||
398 | |||
399 | std::vector<uint8_t> sessionId; | ||
400 | ASSERT_TRUE(openCasSession(&sessionId)); | ||
401 | returnStatus = mMediaCas->setSessionPrivateData(sessionId, hidlPvtData); | ||
402 | EXPECT_TRUE(returnStatus.isOk()); | ||
403 | EXPECT_EQ(Status::OK, returnStatus); | ||
404 | |||
405 | std::vector<uint8_t> streamSessionId; | ||
406 | ASSERT_TRUE(openCasSession(&streamSessionId)); | ||
407 | returnStatus = mMediaCas->setSessionPrivateData(streamSessionId, hidlPvtData); | ||
408 | EXPECT_TRUE(returnStatus.isOk()); | ||
409 | EXPECT_EQ(Status::OK, returnStatus); | ||
410 | |||
411 | returnStatus = mDescramblerBase->setMediaCasSession(sessionId); | ||
412 | EXPECT_TRUE(returnStatus.isOk()); | ||
413 | EXPECT_EQ(Status::OK, returnStatus); | ||
414 | |||
415 | returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); | ||
416 | EXPECT_TRUE(returnStatus.isOk()); | ||
417 | EXPECT_EQ(Status::OK, returnStatus); | ||
418 | |||
419 | hidl_vec<uint8_t> hidlNullPtr; | ||
420 | hidlNullPtr.setToExternal(static_cast<uint8_t*>(nullptr), 0); | ||
421 | returnStatus = mMediaCas->refreshEntitlements(3, hidlNullPtr); | ||
422 | EXPECT_TRUE(returnStatus.isOk()); | ||
423 | EXPECT_EQ(Status::OK, returnStatus); | ||
424 | |||
425 | uint8_t refreshData[] = {0, 1, 2, 3}; | ||
426 | hidl_vec<uint8_t> hidlRefreshData; | ||
427 | hidlRefreshData.setToExternal(static_cast<uint8_t*>(refreshData), sizeof(refreshData)); | ||
428 | returnStatus = mMediaCas->refreshEntitlements(10, hidlRefreshData); | ||
429 | EXPECT_TRUE(returnStatus.isOk()); | ||
430 | EXPECT_EQ(Status::OK, returnStatus); | ||
431 | |||
432 | int32_t eventID = 1; | ||
433 | int32_t eventArg = 2; | ||
434 | mCasListener->testEventEcho(mMediaCas, eventID, eventArg, hidlNullPtr); | ||
435 | |||
436 | eventID = 3; | ||
437 | eventArg = 4; | ||
438 | uint8_t eventData[] = {'e', 'v', 'e', 'n', 't', 'd', 'a', 't', 'a'}; | ||
439 | hidl_vec<uint8_t> hidlEventData; | ||
440 | hidlEventData.setToExternal(static_cast<uint8_t*>(eventData), sizeof(eventData)); | ||
441 | mCasListener->testEventEcho(mMediaCas, eventID, eventArg, hidlEventData); | ||
442 | |||
443 | uint8_t clearKeyEmmData[] = {'c', 'l', 'e', 'a', 'r', 'k', 'e', 'y', 'e', 'm', 'm'}; | ||
444 | hidl_vec<uint8_t> hidlClearKeyEmm; | ||
445 | hidlClearKeyEmm.setToExternal(static_cast<uint8_t*>(clearKeyEmmData), sizeof(clearKeyEmmData)); | ||
446 | returnStatus = mMediaCas->processEmm(hidlClearKeyEmm); | ||
447 | EXPECT_TRUE(returnStatus.isOk()); | ||
448 | EXPECT_EQ(Status::OK, returnStatus); | ||
449 | |||
450 | hidl_vec<uint8_t> hidlEcm; | ||
451 | hidlEcm.setToExternal(const_cast<uint8_t*>(kEcmBinaryBuffer), sizeof(kEcmBinaryBuffer)); | ||
452 | returnStatus = mMediaCas->processEcm(sessionId, hidlEcm); | ||
453 | EXPECT_TRUE(returnStatus.isOk()); | ||
454 | EXPECT_EQ(Status::OK, returnStatus); | ||
455 | returnStatus = mMediaCas->processEcm(streamSessionId, hidlEcm); | ||
456 | EXPECT_TRUE(returnStatus.isOk()); | ||
457 | EXPECT_EQ(Status::OK, returnStatus); | ||
458 | |||
459 | sp<IDescrambler> descrambler; | ||
460 | descrambler = IDescrambler::castFrom(mDescramblerBase); | ||
461 | ASSERT_NE(descrambler, nullptr); | ||
462 | |||
463 | Status descrambleStatus = Status::OK; | ||
464 | hidl_memory hidlDataMemory; | ||
465 | |||
466 | ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &hidlDataMemory)); | ||
467 | EXPECT_EQ(Status::OK, descrambleStatus); | ||
468 | |||
469 | android::sp<IMemory> outMemory = mapMemory(hidlDataMemory); | ||
470 | ASSERT_NE(nullptr, outMemory.get()); | ||
471 | uint8_t* opBuffer = static_cast<uint8_t*>(static_cast<void*>(outMemory->getPointer())); | ||
472 | |||
473 | int compareResult = | ||
474 | memcmp(static_cast<const void*>(opBuffer), static_cast<const void*>(kOutRefBinaryBuffer), | ||
475 | sizeof(kOutRefBinaryBuffer)); | ||
476 | EXPECT_EQ(0, compareResult); | ||
477 | } | ||
478 | |||
479 | TEST_F(MediaCasHidlTest, TestClearKeySessionClosedAfterRelease) { | ||
480 | description("Test that all sessions are closed after a MediaCas object is released"); | ||
481 | |||
482 | ASSERT_TRUE(createCasPlugin(CLEAR_KEY_SYSTEM_ID)); | ||
483 | |||
484 | auto returnStatus = mMediaCas->provision(hidl_string(PROVISION_STR)); | ||
485 | EXPECT_TRUE(returnStatus.isOk()); | ||
486 | EXPECT_EQ(Status::OK, returnStatus); | ||
487 | |||
488 | std::vector<uint8_t> sessionId; | ||
489 | ASSERT_TRUE(openCasSession(&sessionId)); | ||
490 | std::vector<uint8_t> streamSessionId; | ||
491 | ASSERT_TRUE(openCasSession(&streamSessionId)); | ||
492 | |||
493 | returnStatus = mMediaCas->release(); | ||
494 | EXPECT_TRUE(returnStatus.isOk()); | ||
495 | EXPECT_EQ(Status::OK, returnStatus); | ||
496 | |||
497 | returnStatus = mDescramblerBase->setMediaCasSession(sessionId); | ||
498 | EXPECT_TRUE(returnStatus.isOk()); | ||
499 | EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); | ||
500 | |||
501 | returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); | ||
502 | EXPECT_TRUE(returnStatus.isOk()); | ||
503 | EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); | ||
504 | } | ||
505 | |||
506 | TEST_F(MediaCasHidlTest, TestClearKeyErrors) { | ||
507 | description("Test that invalid call sequences fail with expected error codes"); | ||
508 | |||
509 | ASSERT_TRUE(createCasPlugin(CLEAR_KEY_SYSTEM_ID)); | ||
510 | |||
511 | /* | ||
512 | * Test MediaCas error codes | ||
513 | */ | ||
514 | // Provision should fail with an invalid asset string | ||
515 | auto returnStatus = mMediaCas->provision(hidl_string("invalid asset string")); | ||
516 | EXPECT_TRUE(returnStatus.isOk()); | ||
517 | EXPECT_EQ(Status::ERROR_CAS_NO_LICENSE, returnStatus); | ||
518 | |||
519 | // Open a session, then close it so that it should become invalid | ||
520 | std::vector<uint8_t> invalidSessionId; | ||
521 | ASSERT_TRUE(openCasSession(&invalidSessionId)); | ||
522 | returnStatus = mMediaCas->closeSession(invalidSessionId); | ||
523 | EXPECT_TRUE(returnStatus.isOk()); | ||
524 | EXPECT_EQ(Status::OK, returnStatus); | ||
525 | |||
526 | // processEcm should fail with an invalid session id | ||
527 | hidl_vec<uint8_t> hidlEcm; | ||
528 | hidlEcm.setToExternal(const_cast<uint8_t*>(kEcmBinaryBuffer), sizeof(kEcmBinaryBuffer)); | ||
529 | returnStatus = mMediaCas->processEcm(invalidSessionId, hidlEcm); | ||
530 | EXPECT_TRUE(returnStatus.isOk()); | ||
531 | EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); | ||
532 | |||
533 | std::vector<uint8_t> sessionId; | ||
534 | ASSERT_TRUE(openCasSession(&sessionId)); | ||
535 | |||
536 | // processEcm should fail without provisioning | ||
537 | hidlEcm.setToExternal(const_cast<uint8_t*>(kEcmBinaryBuffer), sizeof(kEcmBinaryBuffer)); | ||
538 | returnStatus = mMediaCas->processEcm(sessionId, hidlEcm); | ||
539 | EXPECT_TRUE(returnStatus.isOk()); | ||
540 | EXPECT_EQ(Status::ERROR_CAS_NOT_PROVISIONED, returnStatus); | ||
541 | |||
542 | returnStatus = mMediaCas->provision(hidl_string(PROVISION_STR)); | ||
543 | EXPECT_TRUE(returnStatus.isOk()); | ||
544 | EXPECT_EQ(Status::OK, returnStatus); | ||
545 | |||
546 | // processEcm should fail with ecm buffer that's too short | ||
547 | hidlEcm.setToExternal(const_cast<uint8_t*>(kEcmBinaryBuffer), 8); | ||
548 | returnStatus = mMediaCas->processEcm(sessionId, hidlEcm); | ||
549 | EXPECT_TRUE(returnStatus.isOk()); | ||
550 | EXPECT_EQ(Status::BAD_VALUE, returnStatus); | ||
551 | |||
552 | // processEcm should fail with ecm with bad descriptor count | ||
553 | uint8_t badDescriptor[sizeof(kEcmBinaryBuffer)]; | ||
554 | memcpy(badDescriptor, kEcmBinaryBuffer, sizeof(kEcmBinaryBuffer)); | ||
555 | badDescriptor[17] = 0x03; // change the descriptor count field to 3 (invalid) | ||
556 | hidlEcm.setToExternal(static_cast<uint8_t*>(badDescriptor), sizeof(badDescriptor)); | ||
557 | returnStatus = mMediaCas->processEcm(sessionId, hidlEcm); | ||
558 | EXPECT_TRUE(returnStatus.isOk()); | ||
559 | EXPECT_EQ(Status::ERROR_CAS_UNKNOWN, returnStatus); | ||
560 | |||
561 | /* | ||
562 | * Test MediaDescrambler error codes | ||
563 | */ | ||
564 | // setMediaCasSession should fail with an invalid session id | ||
565 | returnStatus = mDescramblerBase->setMediaCasSession(invalidSessionId); | ||
566 | EXPECT_TRUE(returnStatus.isOk()); | ||
567 | EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); | ||
568 | |||
569 | // descramble should fail without a valid session | ||
570 | sp<IDescrambler> descrambler; | ||
571 | descrambler = IDescrambler::castFrom(mDescramblerBase); | ||
572 | ASSERT_NE(descrambler, nullptr); | ||
573 | |||
574 | Status descrambleStatus = Status::OK; | ||
575 | hidl_memory hidlInMemory; | ||
576 | |||
577 | ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &hidlInMemory)); | ||
578 | EXPECT_EQ(Status::ERROR_CAS_DECRYPT_UNIT_NOT_INITIALIZED, descrambleStatus); | ||
579 | |||
580 | // Now set a valid session, should still fail because no valid ecm is processed | ||
581 | returnStatus = mDescramblerBase->setMediaCasSession(sessionId); | ||
582 | EXPECT_TRUE(returnStatus.isOk()); | ||
583 | EXPECT_EQ(Status::OK, returnStatus); | ||
584 | |||
585 | ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &hidlInMemory)); | ||
586 | EXPECT_EQ(Status::ERROR_CAS_DECRYPT, descrambleStatus); | ||
587 | } | ||
588 | |||
140 | } // anonymous namespace | 589 | } // anonymous namespace |
141 | 590 | ||
142 | int main(int argc, char** argv) { | 591 | int main(int argc, char** argv) { |
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp index 11614449..9e185f27 100644 --- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp +++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioDecTest.cpp | |||
@@ -165,6 +165,7 @@ class AudioDecHidlTest : public ::testing::VtsHalHidlTargetTestBase { | |||
165 | this->omxNode = _nl; | 165 | this->omxNode = _nl; |
166 | }) | 166 | }) |
167 | .isOk()); | 167 | .isOk()); |
168 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | ||
168 | ASSERT_NE(omxNode, nullptr); | 169 | ASSERT_NE(omxNode, nullptr); |
169 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; | 170 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; |
170 | struct StringToName { | 171 | struct StringToName { |
@@ -423,6 +424,9 @@ void getInputChannelInfo(sp<IOmxNode> omxNode, OMX_U32 kPortIndexInput, | |||
423 | ASSERT_EQ(status, | 424 | ASSERT_EQ(status, |
424 | ::android::hardware::media::omx::V1_0::Status::OK); | 425 | ::android::hardware::media::omx::V1_0::Status::OK); |
425 | *nChannels = param.nChannels; | 426 | *nChannels = param.nChannels; |
427 | // NOTE: For amrnb sample rate is 8k and amrwb sample rate is 16k. | ||
428 | // There is no nSampleRate field in OMX_AUDIO_PARAM_AMRTYPE. Just | ||
429 | // return 8k to avoid returning uninit variable. | ||
426 | *nSampleRate = 8000; | 430 | *nSampleRate = 8000; |
427 | break; | 431 | break; |
428 | } | 432 | } |
@@ -548,13 +552,13 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
548 | // set Port Params | 552 | // set Port Params |
549 | int32_t nChannels; | 553 | int32_t nChannels; |
550 | int32_t nSampleRate; | 554 | int32_t nSampleRate; |
551 | getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels, | 555 | ASSERT_NO_FATAL_FAILURE(getInputChannelInfo( |
552 | &nSampleRate); | 556 | omxNode, kPortIndexInput, eEncoding, &nChannels, &nSampleRate)); |
553 | // Configure output port | 557 | // Configure output port |
554 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way | 558 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way |
555 | // to | 559 | // to configure output PCM port. The port undergoes auto |
556 | // configure output PCM port. The port undergoes auto configuration | 560 | // configuration internally basing on parsed elementary stream |
557 | // internally basing on parsed elementary stream information. | 561 | // information. |
558 | if (comp != AudioDecHidlTest::standardComp::vorbis && | 562 | if (comp != AudioDecHidlTest::standardComp::vorbis && |
559 | comp != AudioDecHidlTest::standardComp::opus && | 563 | comp != AudioDecHidlTest::standardComp::opus && |
560 | comp != AudioDecHidlTest::standardComp::raw) { | 564 | comp != AudioDecHidlTest::standardComp::raw) { |
@@ -563,9 +567,8 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
563 | nSampleRate); | 567 | nSampleRate); |
564 | } | 568 | } |
565 | 569 | ||
566 | // If you can disable a port, then you should be able to | 570 | // If you can disable a port, then you should be able to enable it |
567 | // enable | 571 | // as well |
568 | // it as well | ||
569 | status = omxNode->sendCommand( | 572 | status = omxNode->sendCommand( |
570 | toRawCommandType(OMX_CommandPortEnable), kPortIndexOutput); | 573 | toRawCommandType(OMX_CommandPortEnable), kPortIndexOutput); |
571 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | 574 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); |
@@ -576,7 +579,8 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
576 | ASSERT_EQ(status, | 579 | ASSERT_EQ(status, |
577 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 580 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
578 | 581 | ||
579 | allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput); | 582 | ASSERT_NO_FATAL_FAILURE( |
583 | allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput)); | ||
580 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, | 584 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, |
581 | oBuffer); | 585 | oBuffer); |
582 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | 586 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); |
@@ -586,14 +590,14 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
586 | 590 | ||
587 | // dispatch output buffers | 591 | // dispatch output buffers |
588 | for (size_t i = 0; i < oBuffer->size(); i++) { | 592 | for (size_t i = 0; i < oBuffer->size(); i++) { |
589 | dispatchOutputBuffer(omxNode, oBuffer, i); | 593 | ASSERT_NO_FATAL_FAILURE( |
594 | dispatchOutputBuffer(omxNode, oBuffer, i)); | ||
590 | } | 595 | } |
591 | } else { | 596 | } else { |
592 | ASSERT_TRUE(false); | 597 | ASSERT_TRUE(false); |
593 | } | 598 | } |
594 | } else { | 599 | } else { |
595 | EXPECT_TRUE(false); | 600 | ASSERT_TRUE(false); |
596 | return; | ||
597 | } | 601 | } |
598 | } | 602 | } |
599 | 603 | ||
@@ -613,11 +617,12 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
613 | status = | 617 | status = |
614 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); | 618 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); |
615 | if (status == android::hardware::media::omx::V1_0::Status::OK) { | 619 | if (status == android::hardware::media::omx::V1_0::Status::OK) { |
616 | EXPECT_EQ(msg.type, Message::Type::EVENT); | 620 | ASSERT_EQ(msg.type, Message::Type::EVENT); |
617 | packedArgs audioArgs = {eEncoding, comp}; | 621 | packedArgs audioArgs = {eEncoding, comp}; |
618 | portReconfiguration(omxNode, observer, iBuffer, oBuffer, | 622 | ASSERT_NO_FATAL_FAILURE( |
619 | kPortIndexInput, kPortIndexOutput, msg, | 623 | portReconfiguration(omxNode, observer, iBuffer, oBuffer, |
620 | PortMode::PRESET_BYTE_BUFFER, &audioArgs); | 624 | kPortIndexInput, kPortIndexOutput, msg, |
625 | PortMode::PRESET_BYTE_BUFFER, &audioArgs)); | ||
621 | } | 626 | } |
622 | // status == TIMED_OUT, it could be due to process time being large | 627 | // status == TIMED_OUT, it could be due to process time being large |
623 | // than DEFAULT_TIMEOUT or component needs output buffers to start | 628 | // than DEFAULT_TIMEOUT or component needs output buffers to start |
@@ -630,7 +635,8 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
630 | // Dispatch an output buffer assuming outQueue.empty() is true | 635 | // Dispatch an output buffer assuming outQueue.empty() is true |
631 | size_t index; | 636 | size_t index; |
632 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 637 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
633 | dispatchOutputBuffer(omxNode, oBuffer, index); | 638 | ASSERT_NO_FATAL_FAILURE( |
639 | dispatchOutputBuffer(omxNode, oBuffer, index)); | ||
634 | timeOut = TIMEOUT_COUNTER_Q; | 640 | timeOut = TIMEOUT_COUNTER_Q; |
635 | } | 641 | } |
636 | } | 642 | } |
@@ -660,9 +666,10 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
660 | if (status == android::hardware::media::omx::V1_0::Status::OK && | 666 | if (status == android::hardware::media::omx::V1_0::Status::OK && |
661 | msg.type == Message::Type::EVENT) { | 667 | msg.type == Message::Type::EVENT) { |
662 | packedArgs audioArgs = {eEncoding, comp}; | 668 | packedArgs audioArgs = {eEncoding, comp}; |
663 | portReconfiguration(omxNode, observer, iBuffer, oBuffer, | 669 | ASSERT_NO_FATAL_FAILURE( |
664 | kPortIndexInput, kPortIndexOutput, msg, | 670 | portReconfiguration(omxNode, observer, iBuffer, oBuffer, |
665 | PortMode::PRESET_BYTE_BUFFER, &audioArgs); | 671 | kPortIndexInput, kPortIndexOutput, msg, |
672 | PortMode::PRESET_BYTE_BUFFER, &audioArgs)); | ||
666 | } | 673 | } |
667 | 674 | ||
668 | if (frameID == (int)Info->size() || frameID == (offset + range)) break; | 675 | if (frameID == (int)Info->size() || frameID == (offset + range)) break; |
@@ -684,15 +691,16 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
684 | if (signalEOS && ((frameID == (int)Info->size() - 1) || | 691 | if (signalEOS && ((frameID == (int)Info->size() - 1) || |
685 | (frameID == (offset + range - 1)))) | 692 | (frameID == (offset + range - 1)))) |
686 | flags |= OMX_BUFFERFLAG_EOS; | 693 | flags |= OMX_BUFFERFLAG_EOS; |
687 | dispatchInputBuffer(omxNode, iBuffer, index, | 694 | ASSERT_NO_FATAL_FAILURE(dispatchInputBuffer( |
688 | (*Info)[frameID].bytesCount, flags, | 695 | omxNode, iBuffer, index, (*Info)[frameID].bytesCount, flags, |
689 | (*Info)[frameID].timestamp); | 696 | (*Info)[frameID].timestamp)); |
690 | frameID++; | 697 | frameID++; |
691 | iQueued = true; | 698 | iQueued = true; |
692 | } | 699 | } |
693 | // Dispatch output buffer | 700 | // Dispatch output buffer |
694 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 701 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
695 | dispatchOutputBuffer(omxNode, oBuffer, index); | 702 | ASSERT_NO_FATAL_FAILURE( |
703 | dispatchOutputBuffer(omxNode, oBuffer, index)); | ||
696 | oQueued = true; | 704 | oQueued = true; |
697 | } | 705 | } |
698 | // Reset Counters when either input or output buffer is dispatched | 706 | // Reset Counters when either input or output buffer is dispatched |
@@ -701,8 +709,7 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
701 | else | 709 | else |
702 | timeOut--; | 710 | timeOut--; |
703 | if (timeOut == 0) { | 711 | if (timeOut == 0) { |
704 | EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite"; | 712 | ASSERT_TRUE(false) << "Wait on Input/Output is found indefinite"; |
705 | break; | ||
706 | } | 713 | } |
707 | } | 714 | } |
708 | } | 715 | } |
@@ -784,8 +791,8 @@ TEST_F(AudioDecHidlTest, DecodeTest) { | |||
784 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, | 791 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, |
785 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, | 792 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, |
786 | 32); | 793 | 32); |
787 | getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels, | 794 | ASSERT_NO_FATAL_FAILURE(getInputChannelInfo( |
788 | &nSampleRate); | 795 | omxNode, kPortIndexInput, eEncoding, &nChannels, &nSampleRate)); |
789 | // Configure output port | 796 | // Configure output port |
790 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to | 797 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to |
791 | // configure output PCM port. The port undergoes auto configuration | 798 | // configure output PCM port. The port undergoes auto configuration |
@@ -798,28 +805,33 @@ TEST_F(AudioDecHidlTest, DecodeTest) { | |||
798 | android::Vector<BufferInfo> iBuffer, oBuffer; | 805 | android::Vector<BufferInfo> iBuffer, oBuffer; |
799 | 806 | ||
800 | // set state to idle | 807 | // set state to idle |
801 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 808 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle(omxNode, observer, &iBuffer, |
802 | kPortIndexInput, kPortIndexOutput); | 809 | &oBuffer, kPortIndexInput, |
810 | kPortIndexOutput)); | ||
803 | // set state to executing | 811 | // set state to executing |
804 | changeStateIdletoExecute(omxNode, observer); | 812 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
805 | // Port Reconfiguration | 813 | // Port Reconfiguration |
806 | eleStream.open(mURL, std::ifstream::binary); | 814 | eleStream.open(mURL, std::ifstream::binary); |
807 | ASSERT_EQ(eleStream.is_open(), true); | 815 | ASSERT_EQ(eleStream.is_open(), true); |
808 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 816 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
809 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0, | 817 | omxNode, observer, &iBuffer, &oBuffer, eEncoding, kPortIndexInput, |
810 | (int)Info.size(), compName); | 818 | kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(), compName)); |
811 | eleStream.close(); | 819 | eleStream.close(); |
812 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 820 | ASSERT_NO_FATAL_FAILURE( |
813 | kPortIndexInput, kPortIndexOutput, compName); | 821 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, |
822 | kPortIndexInput, kPortIndexOutput, compName)); | ||
814 | packedArgs audioArgs = {eEncoding, compName}; | 823 | packedArgs audioArgs = {eEncoding, compName}; |
815 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, nullptr, | 824 | ASSERT_NO_FATAL_FAILURE(testEOS( |
816 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs); | 825 | omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, nullptr, |
826 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs)); | ||
817 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); | 827 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); |
818 | // set state to idle | 828 | // set state to idle |
819 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 829 | ASSERT_NO_FATAL_FAILURE( |
830 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
820 | // set state to executing | 831 | // set state to executing |
821 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 832 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
822 | kPortIndexInput, kPortIndexOutput); | 833 | &oBuffer, kPortIndexInput, |
834 | kPortIndexOutput)); | ||
823 | } | 835 | } |
824 | 836 | ||
825 | // end of sequence test | 837 | // end of sequence test |
@@ -845,8 +857,8 @@ TEST_F(AudioDecHidlTest, EOSTest_M) { | |||
845 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, | 857 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, |
846 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, | 858 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, |
847 | 32); | 859 | 32); |
848 | getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels, | 860 | ASSERT_NO_FATAL_FAILURE(getInputChannelInfo( |
849 | &nSampleRate); | 861 | omxNode, kPortIndexInput, eEncoding, &nChannels, &nSampleRate)); |
850 | // Configure output port | 862 | // Configure output port |
851 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to | 863 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to |
852 | // configure output PCM port. The port undergoes auto configuration | 864 | // configure output PCM port. The port undergoes auto configuration |
@@ -859,26 +871,31 @@ TEST_F(AudioDecHidlTest, EOSTest_M) { | |||
859 | android::Vector<BufferInfo> iBuffer, oBuffer; | 871 | android::Vector<BufferInfo> iBuffer, oBuffer; |
860 | 872 | ||
861 | // set state to idle | 873 | // set state to idle |
862 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 874 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle(omxNode, observer, &iBuffer, |
863 | kPortIndexInput, kPortIndexOutput); | 875 | &oBuffer, kPortIndexInput, |
876 | kPortIndexOutput)); | ||
864 | // set state to executing | 877 | // set state to executing |
865 | changeStateIdletoExecute(omxNode, observer); | 878 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
866 | 879 | ||
867 | // request EOS at the start | 880 | // request EOS at the start |
868 | packedArgs audioArgs = {eEncoding, compName}; | 881 | packedArgs audioArgs = {eEncoding, compName}; |
869 | testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr, | 882 | ASSERT_NO_FATAL_FAILURE(testEOS( |
870 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs); | 883 | omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr, |
871 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 884 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs)); |
872 | kPortIndexOutput); | 885 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
886 | kPortIndexInput, kPortIndexOutput)); | ||
873 | EXPECT_GE(framesReceived, 0U); | 887 | EXPECT_GE(framesReceived, 0U); |
874 | framesReceived = 0; | 888 | framesReceived = 0; |
875 | timestampUs = 0; | 889 | timestampUs = 0; |
876 | 890 | ||
877 | // set state to idle | 891 | // set state to idle |
878 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 892 | ASSERT_NO_FATAL_FAILURE( |
893 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
894 | |||
879 | // set state to executing | 895 | // set state to executing |
880 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 896 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
881 | kPortIndexInput, kPortIndexOutput); | 897 | &oBuffer, kPortIndexInput, |
898 | kPortIndexOutput)); | ||
882 | } | 899 | } |
883 | 900 | ||
884 | // end of sequence test | 901 | // end of sequence test |
@@ -924,8 +941,8 @@ TEST_F(AudioDecHidlTest, ThumbnailTest) { | |||
924 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, | 941 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, |
925 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, | 942 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, |
926 | 32); | 943 | 32); |
927 | getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels, | 944 | ASSERT_NO_FATAL_FAILURE(getInputChannelInfo( |
928 | &nSampleRate); | 945 | omxNode, kPortIndexInput, eEncoding, &nChannels, &nSampleRate)); |
929 | // Configure output port | 946 | // Configure output port |
930 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to | 947 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to |
931 | // configure output PCM port. The port undergoes auto configuration | 948 | // configure output PCM port. The port undergoes auto configuration |
@@ -938,10 +955,11 @@ TEST_F(AudioDecHidlTest, ThumbnailTest) { | |||
938 | android::Vector<BufferInfo> iBuffer, oBuffer; | 955 | android::Vector<BufferInfo> iBuffer, oBuffer; |
939 | 956 | ||
940 | // set state to idle | 957 | // set state to idle |
941 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 958 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle(omxNode, observer, &iBuffer, |
942 | kPortIndexInput, kPortIndexOutput); | 959 | &oBuffer, kPortIndexInput, |
960 | kPortIndexOutput)); | ||
943 | // set state to executing | 961 | // set state to executing |
944 | changeStateIdletoExecute(omxNode, observer); | 962 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
945 | 963 | ||
946 | // request EOS for thumbnail | 964 | // request EOS for thumbnail |
947 | // signal EOS flag with last frame | 965 | // signal EOS flag with last frame |
@@ -949,17 +967,19 @@ TEST_F(AudioDecHidlTest, ThumbnailTest) { | |||
949 | while (!(Info[i].flags & OMX_BUFFERFLAG_SYNCFRAME)) i++; | 967 | while (!(Info[i].flags & OMX_BUFFERFLAG_SYNCFRAME)) i++; |
950 | eleStream.open(mURL, std::ifstream::binary); | 968 | eleStream.open(mURL, std::ifstream::binary); |
951 | ASSERT_EQ(eleStream.is_open(), true); | 969 | ASSERT_EQ(eleStream.is_open(), true); |
952 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 970 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
953 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0, i + 1, | 971 | omxNode, observer, &iBuffer, &oBuffer, eEncoding, kPortIndexInput, |
954 | compName); | 972 | kPortIndexOutput, eleStream, &Info, 0, i + 1, compName)); |
955 | eleStream.close(); | 973 | eleStream.close(); |
956 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 974 | ASSERT_NO_FATAL_FAILURE( |
957 | kPortIndexInput, kPortIndexOutput, compName); | 975 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, |
976 | kPortIndexInput, kPortIndexOutput, compName)); | ||
958 | packedArgs audioArgs = {eEncoding, compName}; | 977 | packedArgs audioArgs = {eEncoding, compName}; |
959 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, nullptr, | 978 | ASSERT_NO_FATAL_FAILURE(testEOS( |
960 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs); | 979 | omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, nullptr, |
961 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 980 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs)); |
962 | kPortIndexOutput); | 981 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
982 | kPortIndexInput, kPortIndexOutput)); | ||
963 | EXPECT_GE(framesReceived, 1U); | 983 | EXPECT_GE(framesReceived, 1U); |
964 | framesReceived = 0; | 984 | framesReceived = 0; |
965 | timestampUs = 0; | 985 | timestampUs = 0; |
@@ -967,25 +987,29 @@ TEST_F(AudioDecHidlTest, ThumbnailTest) { | |||
967 | // signal EOS flag after last frame | 987 | // signal EOS flag after last frame |
968 | eleStream.open(mURL, std::ifstream::binary); | 988 | eleStream.open(mURL, std::ifstream::binary); |
969 | ASSERT_EQ(eleStream.is_open(), true); | 989 | ASSERT_EQ(eleStream.is_open(), true); |
970 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 990 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
971 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0, i + 1, | 991 | omxNode, observer, &iBuffer, &oBuffer, eEncoding, kPortIndexInput, |
972 | compName, false); | 992 | kPortIndexOutput, eleStream, &Info, 0, i + 1, compName, false)); |
973 | eleStream.close(); | 993 | eleStream.close(); |
974 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 994 | ASSERT_NO_FATAL_FAILURE( |
975 | kPortIndexInput, kPortIndexOutput, compName); | 995 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, |
976 | testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr, | 996 | kPortIndexInput, kPortIndexOutput, compName)); |
977 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs); | 997 | ASSERT_NO_FATAL_FAILURE(testEOS( |
978 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 998 | omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr, |
979 | kPortIndexOutput); | 999 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs)); |
1000 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, | ||
1001 | kPortIndexInput, kPortIndexOutput)); | ||
980 | EXPECT_GE(framesReceived, 1U); | 1002 | EXPECT_GE(framesReceived, 1U); |
981 | framesReceived = 0; | 1003 | framesReceived = 0; |
982 | timestampUs = 0; | 1004 | timestampUs = 0; |
983 | 1005 | ||
984 | // set state to idle | 1006 | // set state to idle |
985 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1007 | ASSERT_NO_FATAL_FAILURE( |
1008 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
986 | // set state to executing | 1009 | // set state to executing |
987 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1010 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
988 | kPortIndexInput, kPortIndexOutput); | 1011 | &oBuffer, kPortIndexInput, |
1012 | kPortIndexOutput)); | ||
989 | } | 1013 | } |
990 | 1014 | ||
991 | // end of sequence test | 1015 | // end of sequence test |
@@ -1031,8 +1055,8 @@ TEST_F(AudioDecHidlTest, SimpleEOSTest) { | |||
1031 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, | 1055 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, |
1032 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, | 1056 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, |
1033 | 32); | 1057 | 32); |
1034 | getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels, | 1058 | ASSERT_NO_FATAL_FAILURE(getInputChannelInfo( |
1035 | &nSampleRate); | 1059 | omxNode, kPortIndexInput, eEncoding, &nChannels, &nSampleRate)); |
1036 | // Configure output port | 1060 | // Configure output port |
1037 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to | 1061 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to |
1038 | // configure output PCM port. The port undergoes auto configuration | 1062 | // configure output PCM port. The port undergoes auto configuration |
@@ -1045,33 +1069,39 @@ TEST_F(AudioDecHidlTest, SimpleEOSTest) { | |||
1045 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1069 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1046 | 1070 | ||
1047 | // set state to idle | 1071 | // set state to idle |
1048 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1072 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle(omxNode, observer, &iBuffer, |
1049 | kPortIndexInput, kPortIndexOutput); | 1073 | &oBuffer, kPortIndexInput, |
1074 | kPortIndexOutput)); | ||
1050 | // set state to executing | 1075 | // set state to executing |
1051 | changeStateIdletoExecute(omxNode, observer); | 1076 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1052 | 1077 | ||
1053 | // request EOS at the end | 1078 | // request EOS at the end |
1054 | eleStream.open(mURL, std::ifstream::binary); | 1079 | eleStream.open(mURL, std::ifstream::binary); |
1055 | ASSERT_EQ(eleStream.is_open(), true); | 1080 | ASSERT_EQ(eleStream.is_open(), true); |
1056 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 1081 | ASSERT_NO_FATAL_FAILURE(decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, |
1057 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0, | 1082 | eEncoding, kPortIndexInput, |
1058 | (int)Info.size(), compName, false); | 1083 | kPortIndexOutput, eleStream, &Info, 0, |
1084 | (int)Info.size(), compName, false)); | ||
1059 | eleStream.close(); | 1085 | eleStream.close(); |
1060 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 1086 | ASSERT_NO_FATAL_FAILURE( |
1061 | kPortIndexInput, kPortIndexOutput, compName); | 1087 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, eEncoding, |
1088 | kPortIndexInput, kPortIndexOutput, compName)); | ||
1062 | packedArgs audioArgs = {eEncoding, compName}; | 1089 | packedArgs audioArgs = {eEncoding, compName}; |
1063 | testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr, | 1090 | ASSERT_NO_FATAL_FAILURE(testEOS( |
1064 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs); | 1091 | omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, nullptr, |
1065 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1092 | portReconfiguration, kPortIndexInput, kPortIndexOutput, &audioArgs)); |
1066 | kPortIndexOutput); | 1093 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
1094 | kPortIndexInput, kPortIndexOutput)); | ||
1067 | framesReceived = 0; | 1095 | framesReceived = 0; |
1068 | timestampUs = 0; | 1096 | timestampUs = 0; |
1069 | 1097 | ||
1070 | // set state to idle | 1098 | // set state to idle |
1071 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1099 | ASSERT_NO_FATAL_FAILURE( |
1100 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1072 | // set state to executing | 1101 | // set state to executing |
1073 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1102 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1074 | kPortIndexInput, kPortIndexOutput); | 1103 | &oBuffer, kPortIndexInput, |
1104 | kPortIndexOutput)); | ||
1075 | } | 1105 | } |
1076 | 1106 | ||
1077 | // test input/output port flush | 1107 | // test input/output port flush |
@@ -1117,8 +1147,8 @@ TEST_F(AudioDecHidlTest, FlushTest) { | |||
1117 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, | 1147 | setDefaultPortParam(omxNode, kPortIndexInput, eEncoding, 1, 8000, |
1118 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, | 1148 | OMX_AUDIO_PCMModeLinear, OMX_NumericalDataSigned, |
1119 | 32); | 1149 | 32); |
1120 | getInputChannelInfo(omxNode, kPortIndexInput, eEncoding, &nChannels, | 1150 | ASSERT_NO_FATAL_FAILURE(getInputChannelInfo( |
1121 | &nSampleRate); | 1151 | omxNode, kPortIndexInput, eEncoding, &nChannels, &nSampleRate)); |
1122 | // Configure output port | 1152 | // Configure output port |
1123 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to | 1153 | // SPECIAL CASE: Soft Vorbis, Opus and Raw Decoders do not offer way to |
1124 | // configure output PCM port. The port undergoes auto configuration | 1154 | // configure output PCM port. The port undergoes auto configuration |
@@ -1131,10 +1161,11 @@ TEST_F(AudioDecHidlTest, FlushTest) { | |||
1131 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1161 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1132 | 1162 | ||
1133 | // set state to idle | 1163 | // set state to idle |
1134 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1164 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle(omxNode, observer, &iBuffer, |
1135 | kPortIndexInput, kPortIndexOutput); | 1165 | &oBuffer, kPortIndexInput, |
1166 | kPortIndexOutput)); | ||
1136 | // set state to executing | 1167 | // set state to executing |
1137 | changeStateIdletoExecute(omxNode, observer); | 1168 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1138 | 1169 | ||
1139 | // Decode 128 frames and flush. here 128 is chosen to ensure there is a key | 1170 | // Decode 128 frames and flush. here 128 is chosen to ensure there is a key |
1140 | // frame after this so that the below section can be convered for all | 1171 | // frame after this so that the below section can be convered for all |
@@ -1142,11 +1173,11 @@ TEST_F(AudioDecHidlTest, FlushTest) { | |||
1142 | int nFrames = 128; | 1173 | int nFrames = 128; |
1143 | eleStream.open(mURL, std::ifstream::binary); | 1174 | eleStream.open(mURL, std::ifstream::binary); |
1144 | ASSERT_EQ(eleStream.is_open(), true); | 1175 | ASSERT_EQ(eleStream.is_open(), true); |
1145 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 1176 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
1146 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, 0, | 1177 | omxNode, observer, &iBuffer, &oBuffer, eEncoding, kPortIndexInput, |
1147 | nFrames, compName, false); | 1178 | kPortIndexOutput, eleStream, &Info, 0, nFrames, compName, false)); |
1148 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1179 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
1149 | kPortIndexOutput); | 1180 | kPortIndexInput, kPortIndexOutput)); |
1150 | framesReceived = 0; | 1181 | framesReceived = 0; |
1151 | 1182 | ||
1152 | // Seek to next key frame and start decoding till the end | 1183 | // Seek to next key frame and start decoding till the end |
@@ -1163,19 +1194,22 @@ TEST_F(AudioDecHidlTest, FlushTest) { | |||
1163 | index++; | 1194 | index++; |
1164 | } | 1195 | } |
1165 | if (keyFrame) { | 1196 | if (keyFrame) { |
1166 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding, | 1197 | ASSERT_NO_FATAL_FAILURE( |
1167 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, | 1198 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, eEncoding, |
1168 | index, Info.size() - index, compName, false); | 1199 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, |
1200 | index, Info.size() - index, compName, false)); | ||
1169 | } | 1201 | } |
1170 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1202 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
1171 | kPortIndexOutput); | 1203 | kPortIndexInput, kPortIndexOutput)); |
1172 | framesReceived = 0; | 1204 | framesReceived = 0; |
1173 | 1205 | ||
1174 | // set state to idle | 1206 | // set state to idle |
1175 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1207 | ASSERT_NO_FATAL_FAILURE( |
1208 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1176 | // set state to executing | 1209 | // set state to executing |
1177 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1210 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1178 | kPortIndexInput, kPortIndexOutput); | 1211 | &oBuffer, kPortIndexInput, |
1212 | kPortIndexOutput)); | ||
1179 | } | 1213 | } |
1180 | 1214 | ||
1181 | int main(int argc, char** argv) { | 1215 | int main(int argc, char** argv) { |
diff --git a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp index 66c46371..d8724449 100644 --- a/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp +++ b/media/omx/1.0/vts/functional/audio/VtsHalMediaOmxV1_0TargetAudioEncTest.cpp | |||
@@ -165,6 +165,7 @@ class AudioEncHidlTest : public ::testing::VtsHalHidlTargetTestBase { | |||
165 | this->omxNode = _nl; | 165 | this->omxNode = _nl; |
166 | }) | 166 | }) |
167 | .isOk()); | 167 | .isOk()); |
168 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | ||
168 | ASSERT_NE(omxNode, nullptr); | 169 | ASSERT_NE(omxNode, nullptr); |
169 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; | 170 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; |
170 | struct StringToName { | 171 | struct StringToName { |
@@ -352,7 +353,7 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
352 | size_t i = 0; | 353 | size_t i = 0; |
353 | status = | 354 | status = |
354 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); | 355 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); |
355 | EXPECT_EQ(status, | 356 | ASSERT_EQ(status, |
356 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 357 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
357 | // status == TIMED_OUT, it could be due to process time being large | 358 | // status == TIMED_OUT, it could be due to process time being large |
358 | // than DEFAULT_TIMEOUT or component needs output buffers to start | 359 | // than DEFAULT_TIMEOUT or component needs output buffers to start |
@@ -365,7 +366,8 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
365 | // Dispatch an output buffer assuming outQueue.empty() is true | 366 | // Dispatch an output buffer assuming outQueue.empty() is true |
366 | size_t index; | 367 | size_t index; |
367 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 368 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
368 | dispatchOutputBuffer(omxNode, oBuffer, index); | 369 | ASSERT_NO_FATAL_FAILURE( |
370 | dispatchOutputBuffer(omxNode, oBuffer, index)); | ||
369 | timeOut = TIMEOUT_COUNTER_Q; | 371 | timeOut = TIMEOUT_COUNTER_Q; |
370 | } | 372 | } |
371 | } | 373 | } |
@@ -408,15 +410,16 @@ void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
408 | if (eleStream.gcount() != bytesCount) break; | 410 | if (eleStream.gcount() != bytesCount) break; |
409 | flags = OMX_BUFFERFLAG_ENDOFFRAME; | 411 | flags = OMX_BUFFERFLAG_ENDOFFRAME; |
410 | if (signalEOS && (nFrames == 1)) flags |= OMX_BUFFERFLAG_EOS; | 412 | if (signalEOS && (nFrames == 1)) flags |= OMX_BUFFERFLAG_EOS; |
411 | dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, flags, | 413 | ASSERT_NO_FATAL_FAILURE(dispatchInputBuffer( |
412 | timestamp); | 414 | omxNode, iBuffer, index, bytesCount, flags, timestamp)); |
413 | timestamp += timestampIncr; | 415 | timestamp += timestampIncr; |
414 | nFrames--; | 416 | nFrames--; |
415 | iQueued = true; | 417 | iQueued = true; |
416 | } | 418 | } |
417 | // Dispatch output buffer | 419 | // Dispatch output buffer |
418 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 420 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
419 | dispatchOutputBuffer(omxNode, oBuffer, index); | 421 | ASSERT_NO_FATAL_FAILURE( |
422 | dispatchOutputBuffer(omxNode, oBuffer, index)); | ||
420 | oQueued = true; | 423 | oQueued = true; |
421 | } | 424 | } |
422 | // Reset Counters when either input or output buffer is dispatched | 425 | // Reset Counters when either input or output buffer is dispatched |
@@ -425,8 +428,7 @@ void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
425 | else | 428 | else |
426 | timeOut--; | 429 | timeOut--; |
427 | if (timeOut == 0) { | 430 | if (timeOut == 0) { |
428 | EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite"; | 431 | ASSERT_TRUE(false) << "Wait on Input/Output is found indefinite"; |
429 | break; | ||
430 | } | 432 | } |
431 | } | 433 | } |
432 | } | 434 | } |
@@ -517,31 +519,39 @@ TEST_F(AudioEncHidlTest, SimpleEncodeTest) { | |||
517 | } | 519 | } |
518 | setupPCMPort(omxNode, kPortIndexInput, nChannels, OMX_NumericalDataSigned, | 520 | setupPCMPort(omxNode, kPortIndexInput, nChannels, OMX_NumericalDataSigned, |
519 | 16, nSampleRate, OMX_AUDIO_PCMModeLinear); | 521 | 16, nSampleRate, OMX_AUDIO_PCMModeLinear); |
522 | |||
520 | // Configure output port | 523 | // Configure output port |
521 | setDefaultPortParam(omxNode, kPortIndexOutput, eEncoding, compName, | 524 | ASSERT_NO_FATAL_FAILURE(setDefaultPortParam(omxNode, kPortIndexOutput, |
522 | nChannels, nSampleRate, nBitRate); | 525 | eEncoding, compName, nChannels, |
526 | nSampleRate, nBitRate)); | ||
523 | 527 | ||
524 | android::Vector<BufferInfo> iBuffer, oBuffer; | 528 | android::Vector<BufferInfo> iBuffer, oBuffer; |
525 | 529 | ||
526 | // set state to idle | 530 | // set state to idle |
527 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 531 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle(omxNode, observer, &iBuffer, |
528 | kPortIndexInput, kPortIndexOutput); | 532 | &oBuffer, kPortIndexInput, |
533 | kPortIndexOutput)); | ||
529 | // set state to executing | 534 | // set state to executing |
530 | changeStateIdletoExecute(omxNode, observer); | 535 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
531 | 536 | ||
532 | eleStream.open(mURL, std::ifstream::binary); | 537 | eleStream.open(mURL, std::ifstream::binary); |
533 | ASSERT_EQ(eleStream.is_open(), true); | 538 | ASSERT_EQ(eleStream.is_open(), true); |
534 | encodeNFrames(omxNode, observer, &iBuffer, &oBuffer, 128, samplesPerFrame, | 539 | ASSERT_NO_FATAL_FAILURE(encodeNFrames(omxNode, observer, &iBuffer, &oBuffer, |
535 | nChannels, nSampleRate, eleStream); | 540 | 128, samplesPerFrame, nChannels, |
541 | nSampleRate, eleStream)); | ||
536 | eleStream.close(); | 542 | eleStream.close(); |
537 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer); | ||
538 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag); | ||
539 | 543 | ||
544 | ASSERT_NO_FATAL_FAILURE( | ||
545 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer)); | ||
546 | ASSERT_NO_FATAL_FAILURE( | ||
547 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag)); | ||
540 | // set state to idle | 548 | // set state to idle |
541 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 549 | ASSERT_NO_FATAL_FAILURE( |
550 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
542 | // set state to executing | 551 | // set state to executing |
543 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 552 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
544 | kPortIndexInput, kPortIndexOutput); | 553 | &oBuffer, kPortIndexInput, |
554 | kPortIndexOutput)); | ||
545 | } | 555 | } |
546 | 556 | ||
547 | int main(int argc, char** argv) { | 557 | int main(int argc, char** argv) { |
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp index 28616e21..34a96a0c 100644 --- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp +++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp | |||
@@ -233,7 +233,7 @@ void allocateGraphicBuffers(sp<IOmxNode> omxNode, OMX_U32 portIndex, | |||
233 | error = _s; | 233 | error = _s; |
234 | descriptor = _n1; | 234 | descriptor = _n1; |
235 | }); | 235 | }); |
236 | EXPECT_EQ(error, android::hardware::graphics::mapper::V2_0::Error::NONE); | 236 | ASSERT_EQ(error, android::hardware::graphics::mapper::V2_0::Error::NONE); |
237 | 237 | ||
238 | static volatile int32_t nextId = 0; | 238 | static volatile int32_t nextId = 0; |
239 | uint64_t id = static_cast<uint64_t>(getpid()) << 32; | 239 | uint64_t id = static_cast<uint64_t>(getpid()) << 32; |
@@ -279,7 +279,7 @@ void allocateBuffer(sp<IOmxNode> omxNode, BufferInfo* buffer, OMX_U32 portIndex, | |||
279 | } else if (portMode == PortMode::PRESET_BYTE_BUFFER || | 279 | } else if (portMode == PortMode::PRESET_BYTE_BUFFER || |
280 | portMode == PortMode::DYNAMIC_ANW_BUFFER) { | 280 | portMode == PortMode::DYNAMIC_ANW_BUFFER) { |
281 | sp<IAllocator> allocator = IAllocator::getService("ashmem"); | 281 | sp<IAllocator> allocator = IAllocator::getService("ashmem"); |
282 | EXPECT_NE(allocator.get(), nullptr); | 282 | ASSERT_NE(allocator.get(), nullptr); |
283 | 283 | ||
284 | buffer->owner = client; | 284 | buffer->owner = client; |
285 | buffer->omxBuffer.type = CodecBuffer::Type::SHARED_MEM; | 285 | buffer->omxBuffer.type = CodecBuffer::Type::SHARED_MEM; |
@@ -319,13 +319,14 @@ void allocateBuffer(sp<IOmxNode> omxNode, BufferInfo* buffer, OMX_U32 portIndex, | |||
319 | OMX_PARAM_PORTDEFINITIONTYPE portDef; | 319 | OMX_PARAM_PORTDEFINITIONTYPE portDef; |
320 | status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex, | 320 | status = getPortParam(omxNode, OMX_IndexParamPortDefinition, portIndex, |
321 | &portDef); | 321 | &portDef); |
322 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | ||
322 | int32_t nStride; | 323 | int32_t nStride; |
323 | buffer->owner = client; | 324 | buffer->owner = client; |
324 | buffer->omxBuffer.type = CodecBuffer::Type::ANW_BUFFER; | 325 | buffer->omxBuffer.type = CodecBuffer::Type::ANW_BUFFER; |
325 | allocateGraphicBuffers(omxNode, portIndex, buffer, | 326 | ASSERT_NO_FATAL_FAILURE(allocateGraphicBuffers( |
326 | portDef.format.video.nFrameWidth, | 327 | omxNode, portIndex, buffer, portDef.format.video.nFrameWidth, |
327 | portDef.format.video.nFrameHeight, &nStride, | 328 | portDef.format.video.nFrameHeight, &nStride, |
328 | portDef.format.video.eColorFormat); | 329 | portDef.format.video.eColorFormat)); |
329 | omxNode->useBuffer( | 330 | omxNode->useBuffer( |
330 | portIndex, buffer->omxBuffer, | 331 | portIndex, buffer->omxBuffer, |
331 | [&status, &buffer](android::hardware::media::omx::V1_0::Status _s, | 332 | [&status, &buffer](android::hardware::media::omx::V1_0::Status _s, |
@@ -352,14 +353,14 @@ void allocatePortBuffers(sp<IOmxNode> omxNode, | |||
352 | 353 | ||
353 | for (size_t i = 0; i < portDef.nBufferCountActual; i++) { | 354 | for (size_t i = 0; i < portDef.nBufferCountActual; i++) { |
354 | BufferInfo buffer; | 355 | BufferInfo buffer; |
355 | allocateBuffer(omxNode, &buffer, portIndex, portDef.nBufferSize, | 356 | ASSERT_NO_FATAL_FAILURE(allocateBuffer(omxNode, &buffer, portIndex, |
356 | portMode); | 357 | portDef.nBufferSize, portMode)); |
357 | if (allocGrap && portMode == PortMode::DYNAMIC_ANW_BUFFER) { | 358 | if (allocGrap && portMode == PortMode::DYNAMIC_ANW_BUFFER) { |
358 | int32_t nStride; | 359 | int32_t nStride; |
359 | allocateGraphicBuffers(omxNode, portIndex, &buffer, | 360 | ASSERT_NO_FATAL_FAILURE(allocateGraphicBuffers( |
360 | portDef.format.video.nFrameWidth, | 361 | omxNode, portIndex, &buffer, portDef.format.video.nFrameWidth, |
361 | portDef.format.video.nFrameHeight, &nStride, | 362 | portDef.format.video.nFrameHeight, &nStride, |
362 | portDef.format.video.eColorFormat); | 363 | portDef.format.video.eColorFormat)); |
363 | } | 364 | } |
364 | buffArray->push(buffer); | 365 | buffArray->push(buffer); |
365 | } | 366 | } |
@@ -391,14 +392,16 @@ void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
391 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 392 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
392 | 393 | ||
393 | // allocate buffers on input port | 394 | // allocate buffers on input port |
394 | allocatePortBuffers(omxNode, iBuffer, kPortIndexInput, pm[0], allocGrap); | 395 | ASSERT_NO_FATAL_FAILURE(allocatePortBuffers( |
396 | omxNode, iBuffer, kPortIndexInput, pm[0], allocGrap)); | ||
395 | 397 | ||
396 | // Dont switch states until the ports are populated | 398 | // Dont switch states until the ports are populated |
397 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); | 399 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); |
398 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 400 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
399 | 401 | ||
400 | // allocate buffers on output port | 402 | // allocate buffers on output port |
401 | allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput, pm[1], allocGrap); | 403 | ASSERT_NO_FATAL_FAILURE(allocatePortBuffers( |
404 | omxNode, oBuffer, kPortIndexOutput, pm[1], allocGrap)); | ||
402 | 405 | ||
403 | // As the ports are populated, check if the state transition is complete | 406 | // As the ports are populated, check if the state transition is complete |
404 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); | 407 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); |
@@ -645,7 +648,8 @@ void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
645 | if (signalEOS) { | 648 | if (signalEOS) { |
646 | if ((i = getEmptyBufferID(iBuffer)) < iBuffer->size()) { | 649 | if ((i = getEmptyBufferID(iBuffer)) < iBuffer->size()) { |
647 | // signal an empty buffer with flag set to EOS | 650 | // signal an empty buffer with flag set to EOS |
648 | dispatchInputBuffer(omxNode, iBuffer, i, 0, OMX_BUFFERFLAG_EOS, 0); | 651 | ASSERT_NO_FATAL_FAILURE(dispatchInputBuffer(omxNode, iBuffer, i, 0, |
652 | OMX_BUFFERFLAG_EOS, 0)); | ||
649 | } else { | 653 | } else { |
650 | ASSERT_TRUE(false); | 654 | ASSERT_TRUE(false); |
651 | } | 655 | } |
@@ -656,7 +660,8 @@ void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
656 | // Dispatch all client owned output buffers to recover remaining frames | 660 | // Dispatch all client owned output buffers to recover remaining frames |
657 | while (1) { | 661 | while (1) { |
658 | if ((i = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 662 | if ((i = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
659 | dispatchOutputBuffer(omxNode, oBuffer, i, pm[1]); | 663 | ASSERT_NO_FATAL_FAILURE( |
664 | dispatchOutputBuffer(omxNode, oBuffer, i, pm[1])); | ||
660 | // if dispatch is successful, perhaps there is a latency | 665 | // if dispatch is successful, perhaps there is a latency |
661 | // in the component. Dont be in a haste to leave. reset timeout | 666 | // in the component. Dont be in a haste to leave. reset timeout |
662 | // counter | 667 | // counter |
@@ -672,16 +677,16 @@ void testEOS(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
672 | if (status == android::hardware::media::omx::V1_0::Status::OK) { | 677 | if (status == android::hardware::media::omx::V1_0::Status::OK) { |
673 | if (msg.data.eventData.event == OMX_EventPortSettingsChanged) { | 678 | if (msg.data.eventData.event == OMX_EventPortSettingsChanged) { |
674 | if (fptr) { | 679 | if (fptr) { |
675 | (*fptr)(omxNode, observer, iBuffer, oBuffer, | 680 | ASSERT_NO_FATAL_FAILURE((*fptr)( |
676 | kPortIndexInput, kPortIndexOutput, msg, pm[1], | 681 | omxNode, observer, iBuffer, oBuffer, kPortIndexInput, |
677 | args); | 682 | kPortIndexOutput, msg, pm[1], args)); |
678 | } else { | 683 | } else { |
679 | // something unexpected happened | 684 | // something unexpected happened |
680 | EXPECT_TRUE(false); | 685 | ASSERT_TRUE(false); |
681 | } | 686 | } |
682 | } else { | 687 | } else { |
683 | // something unexpected happened | 688 | // something unexpected happened |
684 | EXPECT_TRUE(false); | 689 | ASSERT_TRUE(false); |
685 | } | 690 | } |
686 | } | 691 | } |
687 | if (eosFlag == true) break; | 692 | if (eosFlag == true) break; |
diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h index de043b2c..bec733dc 100644 --- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.h +++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright 2016, The Android Open Source Project | 2 | * Copyright 2017, The Android Open Source Project |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
diff --git a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp index 5d0ac35e..401e54ab 100644 --- a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp +++ b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp | |||
@@ -149,6 +149,7 @@ class ComponentHidlTest : public ::testing::VtsHalHidlTargetTestBase { | |||
149 | this->omxNode = _nl; | 149 | this->omxNode = _nl; |
150 | }) | 150 | }) |
151 | .isOk()); | 151 | .isOk()); |
152 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | ||
152 | ASSERT_NE(omxNode, nullptr); | 153 | ASSERT_NE(omxNode, nullptr); |
153 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; | 154 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; |
154 | struct StringToClass { | 155 | struct StringToClass { |
@@ -233,7 +234,6 @@ void initPortMode(PortMode* pm, bool isSecure, | |||
233 | break; | 234 | break; |
234 | } | 235 | } |
235 | } | 236 | } |
236 | return; | ||
237 | } | 237 | } |
238 | 238 | ||
239 | // test dispatch message API call | 239 | // test dispatch message API call |
@@ -410,6 +410,7 @@ TEST_F(ComponentHidlTest, DISABLED_SetDefaultPortParams) { | |||
410 | std::cerr << "[ ERROR ] port direction has to be read only " | 410 | std::cerr << "[ ERROR ] port direction has to be read only " |
411 | "but is changeable \n"; | 411 | "but is changeable \n"; |
412 | } | 412 | } |
413 | EXPECT_EQ(portDef.eDir, mirror.eDir); | ||
413 | setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror); | 414 | setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror); |
414 | 415 | ||
415 | // Port Min BufferCount - Read Only | 416 | // Port Min BufferCount - Read Only |
@@ -435,6 +436,7 @@ TEST_F(ComponentHidlTest, DISABLED_SetDefaultPortParams) { | |||
435 | EXPECT_EQ(portDef.nBufferCountActual, | 436 | EXPECT_EQ(portDef.nBufferCountActual, |
436 | mirror.nBufferCountActual + 1); | 437 | mirror.nBufferCountActual + 1); |
437 | } | 438 | } |
439 | setPortParam(omxNode, OMX_IndexParamPortDefinition, i, &mirror); | ||
438 | 440 | ||
439 | // Port BufferSize is although read only as per OMX-IL 1.2, android | 441 | // Port BufferSize is although read only as per OMX-IL 1.2, android |
440 | // doesnt abide by this. | 442 | // doesnt abide by this. |
@@ -518,8 +520,9 @@ TEST_F(ComponentHidlTest, DISABLED_PopulatePort) { | |||
518 | 520 | ||
519 | for (size_t i = 0; i < portDef.nBufferCountActual; i++) { | 521 | for (size_t i = 0; i < portDef.nBufferCountActual; i++) { |
520 | BufferInfo buffer; | 522 | BufferInfo buffer; |
521 | allocateBuffer(omxNode, &buffer, portBase, nBufferSize, | 523 | ASSERT_NO_FATAL_FAILURE(allocateBuffer(omxNode, &buffer, portBase, |
522 | PortMode::PRESET_BYTE_BUFFER); | 524 | nBufferSize, |
525 | PortMode::PRESET_BYTE_BUFFER)); | ||
523 | pBuffer.push(buffer); | 526 | pBuffer.push(buffer); |
524 | } | 527 | } |
525 | 528 | ||
@@ -560,39 +563,47 @@ TEST_F(ComponentHidlTest, Flush) { | |||
560 | PortMode portMode[2]; | 563 | PortMode portMode[2]; |
561 | initPortMode(portMode, isSecure, compClass); | 564 | initPortMode(portMode, isSecure, compClass); |
562 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 565 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
563 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 566 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
564 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); | 567 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); |
565 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 568 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
566 | 569 | ||
567 | // set state to idle | 570 | // set state to idle |
568 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 571 | ASSERT_NO_FATAL_FAILURE( |
569 | kPortIndexInput, kPortIndexOutput, portMode); | 572 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, |
573 | kPortIndexInput, kPortIndexOutput, portMode)); | ||
570 | // set state to executing | 574 | // set state to executing |
571 | changeStateIdletoExecute(omxNode, observer); | 575 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
572 | // dispatch buffers | 576 | // dispatch buffers |
573 | for (size_t i = 0; i < oBuffer.size(); i++) { | 577 | for (size_t i = 0; i < oBuffer.size(); i++) { |
574 | dispatchOutputBuffer(omxNode, &oBuffer, i, portMode[1]); | 578 | ASSERT_NO_FATAL_FAILURE( |
579 | dispatchOutputBuffer(omxNode, &oBuffer, i, portMode[1])); | ||
575 | } | 580 | } |
576 | // flush port | 581 | // flush port |
577 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 582 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
578 | kPortIndexOutput); | 583 | kPortIndexInput, kPortIndexOutput)); |
584 | #if 0 | ||
579 | // TODO: Sending empty input buffers is slightly tricky. | 585 | // TODO: Sending empty input buffers is slightly tricky. |
580 | // Components sometimes process input buffers even when output buffers are | 586 | // Components sometimes process input buffers even when output buffers are |
581 | // not dispatched. For instance Parsing sequence header does not require | 587 | // not dispatched. For instance Parsing sequence header does not require |
582 | // output buffers. In such instances sending 0 size input buffers might | 588 | // output buffers. In such instances sending 0 size input buffers might |
583 | // make component to send error events. so lets skip this aspect of testing. | 589 | // make component to send error events. so lets skip this aspect of testing. |
584 | // dispatch buffers | 590 | // dispatch buffers |
585 | // for (size_t i = 0; i < iBuffer.size(); i++) { | 591 | for (size_t i = 0; i < iBuffer.size(); i++) { |
586 | // dispatchInputBuffer(omxNode, &iBuffer, i, 0, 0, 0, portMode[0]); | 592 | ASSERT_NO_FATAL_FAILURE( |
587 | // } | 593 | dispatchInputBuffer(omxNode, &iBuffer, i, 0, 0, 0, portMode[0])); |
588 | // // flush ports | 594 | } |
589 | // flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 595 | // flush ports |
590 | // kPortIndexOutput); | 596 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
597 | kPortIndexInput, kPortIndexOutput)); | ||
598 | #endif | ||
599 | |||
591 | // set state to idle | 600 | // set state to idle |
592 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 601 | ASSERT_NO_FATAL_FAILURE( |
602 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
593 | // set state to loaded | 603 | // set state to loaded |
594 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 604 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
595 | kPortIndexInput, kPortIndexOutput); | 605 | &oBuffer, kPortIndexInput, |
606 | kPortIndexOutput)); | ||
596 | } | 607 | } |
597 | 608 | ||
598 | // Flush test - monkeying | 609 | // Flush test - monkeying |
@@ -623,9 +634,9 @@ TEST_F(ComponentHidlTest, Flush_M) { | |||
623 | PortMode portMode[2]; | 634 | PortMode portMode[2]; |
624 | initPortMode(portMode, isSecure, compClass); | 635 | initPortMode(portMode, isSecure, compClass); |
625 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 636 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
626 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 637 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
627 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); | 638 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); |
628 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 639 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
629 | 640 | ||
630 | // // Flush all ports ; receive error OMX_ErrorIncorrectStateOperation | 641 | // // Flush all ports ; receive error OMX_ErrorIncorrectStateOperation |
631 | // status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush), | 642 | // status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush), |
@@ -633,8 +644,9 @@ TEST_F(ComponentHidlTest, Flush_M) { | |||
633 | // ASSERT_NE(status, android::hardware::media::omx::V1_0::Status::OK); | 644 | // ASSERT_NE(status, android::hardware::media::omx::V1_0::Status::OK); |
634 | 645 | ||
635 | // set state to idle | 646 | // set state to idle |
636 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 647 | ASSERT_NO_FATAL_FAILURE( |
637 | kPortIndexInput, kPortIndexOutput, portMode); | 648 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, |
649 | kPortIndexInput, kPortIndexOutput, portMode)); | ||
638 | 650 | ||
639 | // // Flush all ports ; receive error OMX_ErrorIncorrectStateOperation | 651 | // // Flush all ports ; receive error OMX_ErrorIncorrectStateOperation |
640 | // status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush), | 652 | // status = omxNode->sendCommand(toRawCommandType(OMX_CommandFlush), |
@@ -642,10 +654,12 @@ TEST_F(ComponentHidlTest, Flush_M) { | |||
642 | // ASSERT_NE(status, android::hardware::media::omx::V1_0::Status::OK); | 654 | // ASSERT_NE(status, android::hardware::media::omx::V1_0::Status::OK); |
643 | 655 | ||
644 | // set state to executing | 656 | // set state to executing |
645 | changeStateIdletoExecute(omxNode, observer); | 657 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
658 | |||
646 | // dispatch buffers | 659 | // dispatch buffers |
647 | for (size_t i = 0; i < oBuffer.size(); i++) { | 660 | for (size_t i = 0; i < oBuffer.size(); i++) { |
648 | dispatchOutputBuffer(omxNode, &oBuffer, i, portMode[1]); | 661 | ASSERT_NO_FATAL_FAILURE( |
662 | dispatchOutputBuffer(omxNode, &oBuffer, i, portMode[1])); | ||
649 | } | 663 | } |
650 | 664 | ||
651 | // // flush invalid port, expecting OMX_ErrorBadPortIndex | 665 | // // flush invalid port, expecting OMX_ErrorBadPortIndex |
@@ -692,10 +706,12 @@ TEST_F(ComponentHidlTest, Flush_M) { | |||
692 | } | 706 | } |
693 | 707 | ||
694 | // set state to idle | 708 | // set state to idle |
695 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 709 | ASSERT_NO_FATAL_FAILURE( |
710 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
696 | // set state to loaded | 711 | // set state to loaded |
697 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 712 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
698 | kPortIndexInput, kPortIndexOutput); | 713 | &oBuffer, kPortIndexInput, |
714 | kPortIndexOutput)); | ||
699 | } | 715 | } |
700 | 716 | ||
701 | // test port mode configuration when the component is in various states | 717 | // test port mode configuration when the component is in various states |
@@ -726,13 +742,14 @@ TEST_F(ComponentHidlTest, PortModeConfig) { | |||
726 | PortMode portMode[2]; | 742 | PortMode portMode[2]; |
727 | initPortMode(portMode, isSecure, compClass); | 743 | initPortMode(portMode, isSecure, compClass); |
728 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 744 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
729 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 745 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
730 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); | 746 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); |
731 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 747 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
732 | 748 | ||
733 | // set state to idle | 749 | // set state to idle |
734 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 750 | ASSERT_NO_FATAL_FAILURE( |
735 | kPortIndexInput, kPortIndexOutput, portMode); | 751 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, |
752 | kPortIndexInput, kPortIndexOutput, portMode)); | ||
736 | // Only Allow Port Mode configuration in loaded state | 753 | // Only Allow Port Mode configuration in loaded state |
737 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 754 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
738 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); | 755 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); |
@@ -740,7 +757,7 @@ TEST_F(ComponentHidlTest, PortModeConfig) { | |||
740 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); | 757 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); |
741 | 758 | ||
742 | // set state to executing | 759 | // set state to executing |
743 | changeStateIdletoExecute(omxNode, observer); | 760 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
744 | // Only Allow Port Mode configuration in loaded state | 761 | // Only Allow Port Mode configuration in loaded state |
745 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 762 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
746 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); | 763 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); |
@@ -748,10 +765,12 @@ TEST_F(ComponentHidlTest, PortModeConfig) { | |||
748 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); | 765 | EXPECT_NE(status, ::android::hardware::media::omx::V1_0::Status::OK); |
749 | 766 | ||
750 | // set state to idle | 767 | // set state to idle |
751 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 768 | ASSERT_NO_FATAL_FAILURE( |
769 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
752 | // set state to loaded | 770 | // set state to loaded |
753 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 771 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
754 | kPortIndexInput, kPortIndexOutput); | 772 | &oBuffer, kPortIndexInput, |
773 | kPortIndexOutput)); | ||
755 | 774 | ||
756 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 775 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
757 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 776 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
@@ -788,9 +807,9 @@ TEST_F(ComponentHidlTest, StateTransitions) { | |||
788 | PortMode portMode[2]; | 807 | PortMode portMode[2]; |
789 | initPortMode(portMode, isSecure, compClass); | 808 | initPortMode(portMode, isSecure, compClass); |
790 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 809 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
791 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 810 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
792 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); | 811 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); |
793 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 812 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
794 | 813 | ||
795 | // set state to idle | 814 | // set state to idle |
796 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), | 815 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), |
@@ -812,8 +831,8 @@ TEST_F(ComponentHidlTest, StateTransitions) { | |||
812 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 831 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
813 | 832 | ||
814 | BufferInfo buffer; | 833 | BufferInfo buffer; |
815 | allocateBuffer(omxNode, &buffer, j, def.nBufferSize, | 834 | ASSERT_NO_FATAL_FAILURE(allocateBuffer( |
816 | portMode[j - portBase]); | 835 | omxNode, &buffer, j, def.nBufferSize, portMode[j - portBase])); |
817 | pBuffer[j - portBase].push(buffer); | 836 | pBuffer[j - portBase].push(buffer); |
818 | } | 837 | } |
819 | } | 838 | } |
@@ -828,23 +847,28 @@ TEST_F(ComponentHidlTest, StateTransitions) { | |||
828 | ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle); | 847 | ASSERT_EQ(msg.data.eventData.data2, OMX_StateIdle); |
829 | 848 | ||
830 | // set state to executing | 849 | // set state to executing |
831 | changeStateIdletoExecute(omxNode, observer); | 850 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
832 | // dispatch buffers | 851 | // dispatch buffers |
833 | for (size_t i = 0; i < pBuffer[1].size(); i++) { | 852 | for (size_t i = 0; i < pBuffer[1].size(); i++) { |
834 | dispatchOutputBuffer(omxNode, &pBuffer[1], i, portMode[1]); | 853 | ASSERT_NO_FATAL_FAILURE( |
854 | dispatchOutputBuffer(omxNode, &pBuffer[1], i, portMode[1])); | ||
835 | } | 855 | } |
836 | // set state to idle | 856 | // set state to idle |
837 | changeStateExecutetoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1]); | 857 | ASSERT_NO_FATAL_FAILURE( |
838 | // // set state to executing | 858 | changeStateExecutetoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1])); |
839 | // changeStateIdletoExecute(omxNode, observer); | 859 | #if 0 |
840 | // // TODO: Sending empty input buffers is slightly tricky. | 860 | // set state to executing |
841 | // // dispatch buffers | 861 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
842 | // for (size_t i = 0; i < pBuffer[0].size(); i++) { | 862 | // TODO: Sending empty input buffers is slightly tricky. |
843 | // dispatchInputBuffer(omxNode, &pBuffer[0], i, 0, 0, 0, | 863 | // dispatch buffers |
844 | // portMode[0]); | 864 | for (size_t i = 0; i < pBuffer[0].size(); i++) { |
845 | // } | 865 | ASSERT_NO_FATAL_FAILURE( |
846 | // // set state to idle | 866 | dispatchInputBuffer(omxNode, &pBuffer[0], i, 0, 0, 0, portMode[0])); |
847 | // changeStateExecutetoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1]); | 867 | } |
868 | // set state to idle | ||
869 | ASSERT_NO_FATAL_FAILURE( | ||
870 | changeStateExecutetoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1])); | ||
871 | #endif | ||
848 | 872 | ||
849 | // set state to loaded | 873 | // set state to loaded |
850 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), | 874 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), |
@@ -908,8 +932,9 @@ TEST_F(ComponentHidlTest, DISABLED_StateTransitions_M) { | |||
908 | EXPECT_NE(status, android::hardware::media::omx::V1_0::Status::OK); | 932 | EXPECT_NE(status, android::hardware::media::omx::V1_0::Status::OK); |
909 | 933 | ||
910 | // set state to idle | 934 | // set state to idle |
911 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 935 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle(omxNode, observer, &iBuffer, |
912 | kPortIndexInput, kPortIndexOutput); | 936 | &oBuffer, kPortIndexInput, |
937 | kPortIndexOutput)); | ||
913 | 938 | ||
914 | // set state to idle ; receive error OMX_ErrorSameState | 939 | // set state to idle ; receive error OMX_ErrorSameState |
915 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), | 940 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), |
@@ -917,7 +942,7 @@ TEST_F(ComponentHidlTest, DISABLED_StateTransitions_M) { | |||
917 | EXPECT_NE(status, android::hardware::media::omx::V1_0::Status::OK); | 942 | EXPECT_NE(status, android::hardware::media::omx::V1_0::Status::OK); |
918 | 943 | ||
919 | // set state to executing | 944 | // set state to executing |
920 | changeStateIdletoExecute(omxNode, observer); | 945 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
921 | 946 | ||
922 | // set state to executing ; receive error OMX_ErrorSameState | 947 | // set state to executing ; receive error OMX_ErrorSameState |
923 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), | 948 | status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet), |
@@ -929,12 +954,13 @@ TEST_F(ComponentHidlTest, DISABLED_StateTransitions_M) { | |||
929 | OMX_StateLoaded); | 954 | OMX_StateLoaded); |
930 | EXPECT_NE(status, android::hardware::media::omx::V1_0::Status::OK); | 955 | EXPECT_NE(status, android::hardware::media::omx::V1_0::Status::OK); |
931 | 956 | ||
932 | // set state to Idle | 957 | // set state to idle |
933 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 958 | ASSERT_NO_FATAL_FAILURE( |
934 | 959 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | |
935 | // set state to Loaded | 960 | // set state to loaded |
936 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 961 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
937 | kPortIndexInput, kPortIndexOutput); | 962 | &oBuffer, kPortIndexInput, |
963 | kPortIndexOutput)); | ||
938 | } | 964 | } |
939 | 965 | ||
940 | // port enable disable test | 966 | // port enable disable test |
@@ -1017,14 +1043,14 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Idle) { | |||
1017 | PortMode portMode[2]; | 1043 | PortMode portMode[2]; |
1018 | initPortMode(portMode, isSecure, compClass); | 1044 | initPortMode(portMode, isSecure, compClass); |
1019 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 1045 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
1020 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 1046 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
1021 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); | 1047 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); |
1022 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 1048 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
1023 | 1049 | ||
1024 | // set state to idle | 1050 | // set state to idle |
1025 | changeStateLoadedtoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1], | 1051 | ASSERT_NO_FATAL_FAILURE( |
1026 | kPortIndexInput, kPortIndexOutput, portMode); | 1052 | changeStateLoadedtoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1], |
1027 | 1053 | kPortIndexInput, kPortIndexOutput, portMode)); | |
1028 | for (size_t i = portBase; i < portBase + 2; i++) { | 1054 | for (size_t i = portBase; i < portBase + 2; i++) { |
1029 | status = | 1055 | status = |
1030 | omxNode->sendCommand(toRawCommandType(OMX_CommandPortDisable), i); | 1056 | omxNode->sendCommand(toRawCommandType(OMX_CommandPortDisable), i); |
@@ -1072,8 +1098,8 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Idle) { | |||
1072 | ASSERT_EQ(status, | 1098 | ASSERT_EQ(status, |
1073 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 1099 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
1074 | 1100 | ||
1075 | allocatePortBuffers(omxNode, &pBuffer[i - portBase], i, | 1101 | ASSERT_NO_FATAL_FAILURE(allocatePortBuffers( |
1076 | portMode[i - portBase]); | 1102 | omxNode, &pBuffer[i - portBase], i, portMode[i - portBase])); |
1077 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, | 1103 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, |
1078 | &pBuffer[0], &pBuffer[1]); | 1104 | &pBuffer[0], &pBuffer[1]); |
1079 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | 1105 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); |
@@ -1087,8 +1113,9 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Idle) { | |||
1087 | } | 1113 | } |
1088 | 1114 | ||
1089 | // set state to Loaded | 1115 | // set state to Loaded |
1090 | changeStateIdletoLoaded(omxNode, observer, &pBuffer[0], &pBuffer[1], | 1116 | ASSERT_NO_FATAL_FAILURE( |
1091 | kPortIndexInput, kPortIndexOutput); | 1117 | changeStateIdletoLoaded(omxNode, observer, &pBuffer[0], &pBuffer[1], |
1118 | kPortIndexInput, kPortIndexOutput)); | ||
1092 | } | 1119 | } |
1093 | 1120 | ||
1094 | // port enable disable test | 1121 | // port enable disable test |
@@ -1121,20 +1148,20 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Execute) { | |||
1121 | PortMode portMode[2]; | 1148 | PortMode portMode[2]; |
1122 | initPortMode(portMode, isSecure, compClass); | 1149 | initPortMode(portMode, isSecure, compClass); |
1123 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); | 1150 | status = omxNode->setPortMode(kPortIndexInput, portMode[0]); |
1124 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 1151 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
1125 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); | 1152 | status = omxNode->setPortMode(kPortIndexOutput, portMode[1]); |
1126 | EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 1153 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
1127 | 1154 | ||
1128 | // set state to idle | 1155 | // set state to idle |
1129 | changeStateLoadedtoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1], | 1156 | ASSERT_NO_FATAL_FAILURE( |
1130 | kPortIndexInput, kPortIndexOutput, portMode); | 1157 | changeStateLoadedtoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1], |
1131 | 1158 | kPortIndexInput, kPortIndexOutput, portMode)); | |
1132 | // set state to executing | 1159 | // set state to executing |
1133 | changeStateIdletoExecute(omxNode, observer); | 1160 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1134 | |||
1135 | // dispatch buffers | 1161 | // dispatch buffers |
1136 | for (size_t i = 0; i < pBuffer[1].size(); i++) { | 1162 | for (size_t i = 0; i < pBuffer[1].size(); i++) { |
1137 | dispatchOutputBuffer(omxNode, &pBuffer[1], i, portMode[1]); | 1163 | ASSERT_NO_FATAL_FAILURE( |
1164 | dispatchOutputBuffer(omxNode, &pBuffer[1], i, portMode[1])); | ||
1138 | } | 1165 | } |
1139 | 1166 | ||
1140 | for (size_t i = portBase; i < portBase + 2; i++) { | 1167 | for (size_t i = portBase; i < portBase + 2; i++) { |
@@ -1187,8 +1214,8 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Execute) { | |||
1187 | ASSERT_EQ(status, | 1214 | ASSERT_EQ(status, |
1188 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 1215 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
1189 | 1216 | ||
1190 | allocatePortBuffers(omxNode, &pBuffer[i - portBase], i, | 1217 | ASSERT_NO_FATAL_FAILURE(allocatePortBuffers( |
1191 | portMode[i - portBase]); | 1218 | omxNode, &pBuffer[i - portBase], i, portMode[i - portBase])); |
1192 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, | 1219 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, |
1193 | &pBuffer[0], &pBuffer[1]); | 1220 | &pBuffer[0], &pBuffer[1]); |
1194 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | 1221 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); |
@@ -1201,12 +1228,13 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Execute) { | |||
1201 | } | 1228 | } |
1202 | } | 1229 | } |
1203 | 1230 | ||
1204 | // set state to Idle | 1231 | // set state to idle |
1205 | changeStateExecutetoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1]); | 1232 | ASSERT_NO_FATAL_FAILURE( |
1206 | 1233 | changeStateExecutetoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1])); | |
1207 | // set state to Loaded | 1234 | // set state to loaded |
1208 | changeStateIdletoLoaded(omxNode, observer, &pBuffer[0], &pBuffer[1], | 1235 | ASSERT_NO_FATAL_FAILURE( |
1209 | kPortIndexInput, kPortIndexOutput); | 1236 | changeStateIdletoLoaded(omxNode, observer, &pBuffer[0], &pBuffer[1], |
1237 | kPortIndexInput, kPortIndexOutput)); | ||
1210 | } | 1238 | } |
1211 | 1239 | ||
1212 | // port enable disable test - monkeying | 1240 | // port enable disable test - monkeying |
diff --git a/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp b/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp index 7cffea8c..5a31d691 100644 --- a/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp +++ b/media/omx/1.0/vts/functional/master/VtsHalMediaOmxV1_0TargetMasterTest.cpp | |||
@@ -150,6 +150,7 @@ TEST_F(MasterHidlTest, ListServiceAttr) { | |||
150 | attributes = _nl; | 150 | attributes = _nl; |
151 | }) | 151 | }) |
152 | .isOk()); | 152 | .isOk()); |
153 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | ||
153 | if (attributes.size() == 0) ALOGV("Warning, Attribute list empty"); | 154 | if (attributes.size() == 0) ALOGV("Warning, Attribute list empty"); |
154 | } | 155 | } |
155 | 156 | ||
@@ -186,6 +187,7 @@ TEST_F(MasterHidlTest, ListNodes) { | |||
186 | nodeList = _nl; | 187 | nodeList = _nl; |
187 | }) | 188 | }) |
188 | .isOk()); | 189 | .isOk()); |
190 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | ||
189 | if (nodeList.size() == 0) | 191 | if (nodeList.size() == 0) |
190 | ALOGV("Warning, ComponentInfo list empty"); | 192 | ALOGV("Warning, ComponentInfo list empty"); |
191 | else { | 193 | else { |
@@ -204,6 +206,7 @@ TEST_F(MasterHidlTest, ListNodes) { | |||
204 | omxNode = _nl; | 206 | omxNode = _nl; |
205 | }) | 207 | }) |
206 | .isOk()); | 208 | .isOk()); |
209 | ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); | ||
207 | if (omxNode == nullptr) { | 210 | if (omxNode == nullptr) { |
208 | isPass = false; | 211 | isPass = false; |
209 | std::cerr << "[ !OK ] " << nodeList[i].mName.c_str() | 212 | std::cerr << "[ !OK ] " << nodeList[i].mName.c_str() |
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp index a2547e89..667c2e12 100644 --- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp +++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp | |||
@@ -166,6 +166,7 @@ class VideoDecHidlTest : public ::testing::VtsHalHidlTargetTestBase { | |||
166 | this->omxNode = _nl; | 166 | this->omxNode = _nl; |
167 | }) | 167 | }) |
168 | .isOk()); | 168 | .isOk()); |
169 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | ||
169 | ASSERT_NE(omxNode, nullptr); | 170 | ASSERT_NE(omxNode, nullptr); |
170 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; | 171 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; |
171 | struct StringToName { | 172 | struct StringToName { |
@@ -498,8 +499,7 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
498 | nFrameWidth, nFrameHeight, 0, xFramerate); | 499 | nFrameWidth, nFrameHeight, 0, xFramerate); |
499 | 500 | ||
500 | // If you can disable a port, then you should be able to | 501 | // If you can disable a port, then you should be able to |
501 | // enable | 502 | // enable it as well |
502 | // it as well | ||
503 | status = omxNode->sendCommand( | 503 | status = omxNode->sendCommand( |
504 | toRawCommandType(OMX_CommandPortEnable), kPortIndexOutput); | 504 | toRawCommandType(OMX_CommandPortEnable), kPortIndexOutput); |
505 | ASSERT_EQ(status, | 505 | ASSERT_EQ(status, |
@@ -512,8 +512,8 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
512 | status, | 512 | status, |
513 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 513 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
514 | 514 | ||
515 | allocatePortBuffers(omxNode, oBuffer, kPortIndexOutput, | 515 | ASSERT_NO_FATAL_FAILURE(allocatePortBuffers( |
516 | oPortMode, true); | 516 | omxNode, oBuffer, kPortIndexOutput, oPortMode, true)); |
517 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, | 517 | status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, |
518 | iBuffer, oBuffer); | 518 | iBuffer, oBuffer); |
519 | ASSERT_EQ(status, | 519 | ASSERT_EQ(status, |
@@ -534,7 +534,8 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
534 | 534 | ||
535 | // dispatch output buffers | 535 | // dispatch output buffers |
536 | for (size_t i = 0; i < oBuffer->size(); i++) { | 536 | for (size_t i = 0; i < oBuffer->size(); i++) { |
537 | dispatchOutputBuffer(omxNode, oBuffer, i, oPortMode); | 537 | ASSERT_NO_FATAL_FAILURE( |
538 | dispatchOutputBuffer(omxNode, oBuffer, i, oPortMode)); | ||
538 | } | 539 | } |
539 | } else { | 540 | } else { |
540 | ASSERT_TRUE(false); | 541 | ASSERT_TRUE(false); |
@@ -550,7 +551,7 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
550 | } else if (msg.data.eventData.event == OMX_EventError) { | 551 | } else if (msg.data.eventData.event == OMX_EventError) { |
551 | std::cerr << "[ ERROR ] OMX_EventError/ " | 552 | std::cerr << "[ ERROR ] OMX_EventError/ " |
552 | "Decode Frame Call might be failed \n"; | 553 | "Decode Frame Call might be failed \n"; |
553 | return; | 554 | ASSERT_TRUE(false); |
554 | } else { | 555 | } else { |
555 | // something unexpected happened | 556 | // something unexpected happened |
556 | ASSERT_TRUE(false); | 557 | ASSERT_TRUE(false); |
@@ -572,10 +573,10 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
572 | status = | 573 | status = |
573 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); | 574 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); |
574 | if (status == android::hardware::media::omx::V1_0::Status::OK) { | 575 | if (status == android::hardware::media::omx::V1_0::Status::OK) { |
575 | EXPECT_EQ(msg.type, Message::Type::EVENT); | 576 | ASSERT_EQ(msg.type, Message::Type::EVENT); |
576 | portReconfiguration(omxNode, observer, iBuffer, oBuffer, | 577 | ASSERT_NO_FATAL_FAILURE(portReconfiguration( |
577 | kPortIndexInput, kPortIndexOutput, msg, | 578 | omxNode, observer, iBuffer, oBuffer, kPortIndexInput, |
578 | oPortMode, nullptr); | 579 | kPortIndexOutput, msg, oPortMode, nullptr)); |
579 | } | 580 | } |
580 | // status == TIMED_OUT, it could be due to process time being large | 581 | // status == TIMED_OUT, it could be due to process time being large |
581 | // than DEFAULT_TIMEOUT or component needs output buffers to start | 582 | // than DEFAULT_TIMEOUT or component needs output buffers to start |
@@ -588,7 +589,8 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
588 | // Dispatch an output buffer assuming outQueue.empty() is true | 589 | // Dispatch an output buffer assuming outQueue.empty() is true |
589 | size_t index; | 590 | size_t index; |
590 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 591 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
591 | dispatchOutputBuffer(omxNode, oBuffer, index, oPortMode); | 592 | ASSERT_NO_FATAL_FAILURE( |
593 | dispatchOutputBuffer(omxNode, oBuffer, index, oPortMode)); | ||
592 | timeOut = TIMEOUT_COUNTER_Q; | 594 | timeOut = TIMEOUT_COUNTER_Q; |
593 | } | 595 | } |
594 | } | 596 | } |
@@ -617,9 +619,9 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
617 | // Port Reconfiguration | 619 | // Port Reconfiguration |
618 | if (status == android::hardware::media::omx::V1_0::Status::OK && | 620 | if (status == android::hardware::media::omx::V1_0::Status::OK && |
619 | msg.type == Message::Type::EVENT) { | 621 | msg.type == Message::Type::EVENT) { |
620 | portReconfiguration(omxNode, observer, iBuffer, oBuffer, | 622 | ASSERT_NO_FATAL_FAILURE(portReconfiguration( |
621 | kPortIndexInput, kPortIndexOutput, msg, | 623 | omxNode, observer, iBuffer, oBuffer, kPortIndexInput, |
622 | oPortMode, nullptr); | 624 | kPortIndexOutput, msg, oPortMode, nullptr)); |
623 | } | 625 | } |
624 | 626 | ||
625 | if (frameID == (int)Info->size() || frameID == (offset + range)) break; | 627 | if (frameID == (int)Info->size() || frameID == (offset + range)) break; |
@@ -641,15 +643,16 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
641 | if (signalEOS && ((frameID == (int)Info->size() - 1) || | 643 | if (signalEOS && ((frameID == (int)Info->size() - 1) || |
642 | (frameID == (offset + range - 1)))) | 644 | (frameID == (offset + range - 1)))) |
643 | flags |= OMX_BUFFERFLAG_EOS; | 645 | flags |= OMX_BUFFERFLAG_EOS; |
644 | dispatchInputBuffer(omxNode, iBuffer, index, | 646 | ASSERT_NO_FATAL_FAILURE(dispatchInputBuffer( |
645 | (*Info)[frameID].bytesCount, flags, | 647 | omxNode, iBuffer, index, (*Info)[frameID].bytesCount, flags, |
646 | (*Info)[frameID].timestamp); | 648 | (*Info)[frameID].timestamp)); |
647 | frameID++; | 649 | frameID++; |
648 | iQueued = true; | 650 | iQueued = true; |
649 | } | 651 | } |
650 | // Dispatch output buffer | 652 | // Dispatch output buffer |
651 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 653 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
652 | dispatchOutputBuffer(omxNode, oBuffer, index, oPortMode); | 654 | ASSERT_NO_FATAL_FAILURE( |
655 | dispatchOutputBuffer(omxNode, oBuffer, index, oPortMode)); | ||
653 | oQueued = true; | 656 | oQueued = true; |
654 | } | 657 | } |
655 | // Reset Counters when either input or output buffer is dispatched | 658 | // Reset Counters when either input or output buffer is dispatched |
@@ -658,8 +661,7 @@ void decodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
658 | else | 661 | else |
659 | timeOut--; | 662 | timeOut--; |
660 | if (timeOut == 0) { | 663 | if (timeOut == 0) { |
661 | EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite"; | 664 | ASSERT_TRUE(false) << "Wait on Input/Output is found indefinite"; |
662 | break; | ||
663 | } | 665 | } |
664 | } | 666 | } |
665 | } | 667 | } |
@@ -888,28 +890,33 @@ TEST_F(VideoDecHidlTest, DecodeTest) { | |||
888 | android::Vector<BufferInfo> iBuffer, oBuffer; | 890 | android::Vector<BufferInfo> iBuffer, oBuffer; |
889 | 891 | ||
890 | // set state to idle | 892 | // set state to idle |
891 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 893 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle( |
892 | kPortIndexInput, kPortIndexOutput, portMode, true); | 894 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
895 | kPortIndexOutput, portMode, true)); | ||
893 | // set state to executing | 896 | // set state to executing |
894 | changeStateIdletoExecute(omxNode, observer); | 897 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
895 | 898 | ||
896 | // Port Reconfiguration | 899 | // Port Reconfiguration |
897 | eleStream.open(mURL, std::ifstream::binary); | 900 | eleStream.open(mURL, std::ifstream::binary); |
898 | ASSERT_EQ(eleStream.is_open(), true); | 901 | ASSERT_EQ(eleStream.is_open(), true); |
899 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 902 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
900 | kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(), | 903 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
901 | portMode[1]); | 904 | kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(), portMode[1])); |
902 | eleStream.close(); | 905 | eleStream.close(); |
903 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, | 906 | ASSERT_NO_FATAL_FAILURE( |
904 | kPortIndexInput, kPortIndexOutput, portMode[1]); | 907 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, |
905 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode, | 908 | kPortIndexInput, kPortIndexOutput, portMode[1])); |
906 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr); | 909 | ASSERT_NO_FATAL_FAILURE(testEOS( |
910 | omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode, | ||
911 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr)); | ||
907 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); | 912 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); |
908 | // set state to idle | 913 | // set state to idle |
909 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 914 | ASSERT_NO_FATAL_FAILURE( |
915 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
910 | // set state to executing | 916 | // set state to executing |
911 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 917 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
912 | kPortIndexInput, kPortIndexOutput); | 918 | &oBuffer, kPortIndexInput, |
919 | kPortIndexOutput)); | ||
913 | } | 920 | } |
914 | 921 | ||
915 | // Test for adaptive playback support | 922 | // Test for adaptive playback support |
@@ -985,10 +992,11 @@ TEST_F(VideoDecHidlTest, AdaptivePlaybackTest) { | |||
985 | android::Vector<BufferInfo> iBuffer, oBuffer; | 992 | android::Vector<BufferInfo> iBuffer, oBuffer; |
986 | 993 | ||
987 | // set state to idle | 994 | // set state to idle |
988 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 995 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle( |
989 | kPortIndexInput, kPortIndexOutput, portMode, true); | 996 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
997 | kPortIndexOutput, portMode, true)); | ||
990 | // set state to executing | 998 | // set state to executing |
991 | changeStateIdletoExecute(omxNode, observer); | 999 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
992 | 1000 | ||
993 | timestampDevTest = true; | 1001 | timestampDevTest = true; |
994 | uint32_t timestampOffset = 0; | 1002 | uint32_t timestampOffset = 0; |
@@ -1021,9 +1029,10 @@ TEST_F(VideoDecHidlTest, AdaptivePlaybackTest) { | |||
1021 | // Port Reconfiguration | 1029 | // Port Reconfiguration |
1022 | eleStream.open(mURL, std::ifstream::binary); | 1030 | eleStream.open(mURL, std::ifstream::binary); |
1023 | ASSERT_EQ(eleStream.is_open(), true); | 1031 | ASSERT_EQ(eleStream.is_open(), true); |
1024 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1032 | ASSERT_NO_FATAL_FAILURE( |
1025 | kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(), | 1033 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, |
1026 | portMode[1], false); | 1034 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, |
1035 | 0, (int)Info.size(), portMode[1], false)); | ||
1027 | eleStream.close(); | 1036 | eleStream.close(); |
1028 | 1037 | ||
1029 | getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, | 1038 | getInputChannelInfo(omxNode, kPortIndexInput, &nFrameWidth, |
@@ -1042,16 +1051,20 @@ TEST_F(VideoDecHidlTest, AdaptivePlaybackTest) { | |||
1042 | } | 1051 | } |
1043 | portSettingsChange = false; | 1052 | portSettingsChange = false; |
1044 | } | 1053 | } |
1045 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, | 1054 | ASSERT_NO_FATAL_FAILURE( |
1046 | kPortIndexInput, kPortIndexOutput, portMode[1]); | 1055 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, |
1047 | testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, | 1056 | kPortIndexInput, kPortIndexOutput, portMode[1])); |
1048 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr); | 1057 | ASSERT_NO_FATAL_FAILURE(testEOS( |
1058 | omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, | ||
1059 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr)); | ||
1049 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); | 1060 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); |
1050 | // set state to idle | 1061 | // set state to idle |
1051 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1062 | ASSERT_NO_FATAL_FAILURE( |
1063 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1052 | // set state to executing | 1064 | // set state to executing |
1053 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1065 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1054 | kPortIndexInput, kPortIndexOutput); | 1066 | &oBuffer, kPortIndexInput, |
1067 | kPortIndexOutput)); | ||
1055 | } | 1068 | } |
1056 | 1069 | ||
1057 | // end of sequence test | 1070 | // end of sequence test |
@@ -1095,25 +1108,29 @@ TEST_F(VideoDecHidlTest, EOSTest_M) { | |||
1095 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1108 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1096 | 1109 | ||
1097 | // set state to idle | 1110 | // set state to idle |
1098 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1111 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle( |
1099 | kPortIndexInput, kPortIndexOutput, portMode, true); | 1112 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
1113 | kPortIndexOutput, portMode, true)); | ||
1100 | // set state to executing | 1114 | // set state to executing |
1101 | changeStateIdletoExecute(omxNode, observer); | 1115 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1102 | 1116 | ||
1103 | // request EOS at the start | 1117 | // request EOS at the start |
1104 | testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, | 1118 | ASSERT_NO_FATAL_FAILURE(testEOS( |
1105 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr); | 1119 | omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, |
1106 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1120 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr)); |
1107 | kPortIndexOutput); | 1121 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
1122 | kPortIndexInput, kPortIndexOutput)); | ||
1108 | EXPECT_GE(framesReceived, 0U); | 1123 | EXPECT_GE(framesReceived, 0U); |
1109 | framesReceived = 0; | 1124 | framesReceived = 0; |
1110 | timestampUs = 0; | 1125 | timestampUs = 0; |
1111 | 1126 | ||
1112 | // set state to idle | 1127 | // set state to idle |
1113 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1128 | ASSERT_NO_FATAL_FAILURE( |
1129 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1114 | // set state to executing | 1130 | // set state to executing |
1115 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1131 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1116 | kPortIndexInput, kPortIndexOutput); | 1132 | &oBuffer, kPortIndexInput, |
1133 | kPortIndexOutput)); | ||
1117 | } | 1134 | } |
1118 | 1135 | ||
1119 | // end of sequence test | 1136 | // end of sequence test |
@@ -1183,50 +1200,58 @@ TEST_F(VideoDecHidlTest, ThumbnailTest) { | |||
1183 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1200 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1184 | 1201 | ||
1185 | // set state to idle | 1202 | // set state to idle |
1186 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1203 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle( |
1187 | kPortIndexInput, kPortIndexOutput, portMode, true); | 1204 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
1205 | kPortIndexOutput, portMode, true)); | ||
1188 | // set state to executing | 1206 | // set state to executing |
1189 | changeStateIdletoExecute(omxNode, observer); | 1207 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1190 | 1208 | ||
1191 | // request EOS for thumbnail | 1209 | // request EOS for thumbnail |
1192 | size_t i = 0; | 1210 | size_t i = 0; |
1193 | while (!(Info[i].flags & OMX_BUFFERFLAG_SYNCFRAME)) i++; | 1211 | while (!(Info[i].flags & OMX_BUFFERFLAG_SYNCFRAME)) i++; |
1194 | eleStream.open(mURL, std::ifstream::binary); | 1212 | eleStream.open(mURL, std::ifstream::binary); |
1195 | ASSERT_EQ(eleStream.is_open(), true); | 1213 | ASSERT_EQ(eleStream.is_open(), true); |
1196 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1214 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
1197 | kPortIndexOutput, eleStream, &Info, 0, i + 1, portMode[1]); | 1215 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
1216 | kPortIndexOutput, eleStream, &Info, 0, i + 1, portMode[1])); | ||
1198 | eleStream.close(); | 1217 | eleStream.close(); |
1199 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, | 1218 | ASSERT_NO_FATAL_FAILURE( |
1200 | kPortIndexInput, kPortIndexOutput, portMode[1]); | 1219 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, |
1201 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode, | 1220 | kPortIndexInput, kPortIndexOutput, portMode[1])); |
1202 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr); | 1221 | ASSERT_NO_FATAL_FAILURE(testEOS( |
1203 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1222 | omxNode, observer, &iBuffer, &oBuffer, false, eosFlag, portMode, |
1204 | kPortIndexOutput); | 1223 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr)); |
1224 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, | ||
1225 | kPortIndexInput, kPortIndexOutput)); | ||
1205 | EXPECT_GE(framesReceived, 1U); | 1226 | EXPECT_GE(framesReceived, 1U); |
1206 | framesReceived = 0; | 1227 | framesReceived = 0; |
1207 | timestampUs = 0; | 1228 | timestampUs = 0; |
1208 | 1229 | ||
1209 | eleStream.open(mURL, std::ifstream::binary); | 1230 | eleStream.open(mURL, std::ifstream::binary); |
1210 | ASSERT_EQ(eleStream.is_open(), true); | 1231 | ASSERT_EQ(eleStream.is_open(), true); |
1211 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1232 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
1212 | kPortIndexOutput, eleStream, &Info, 0, i + 1, portMode[1], | 1233 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
1213 | false); | 1234 | kPortIndexOutput, eleStream, &Info, 0, i + 1, portMode[1], false)); |
1214 | eleStream.close(); | 1235 | eleStream.close(); |
1215 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, | 1236 | ASSERT_NO_FATAL_FAILURE( |
1216 | kPortIndexInput, kPortIndexOutput, portMode[1]); | 1237 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, |
1217 | testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, | 1238 | kPortIndexInput, kPortIndexOutput, portMode[1])); |
1218 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr); | 1239 | ASSERT_NO_FATAL_FAILURE(testEOS( |
1219 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1240 | omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, |
1220 | kPortIndexOutput); | 1241 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr)); |
1242 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, | ||
1243 | kPortIndexInput, kPortIndexOutput)); | ||
1221 | EXPECT_GE(framesReceived, 1U); | 1244 | EXPECT_GE(framesReceived, 1U); |
1222 | framesReceived = 0; | 1245 | framesReceived = 0; |
1223 | timestampUs = 0; | 1246 | timestampUs = 0; |
1224 | 1247 | ||
1225 | // set state to idle | 1248 | // set state to idle |
1226 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1249 | ASSERT_NO_FATAL_FAILURE( |
1250 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1227 | // set state to executing | 1251 | // set state to executing |
1228 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1252 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1229 | kPortIndexInput, kPortIndexOutput); | 1253 | &oBuffer, kPortIndexInput, |
1254 | kPortIndexOutput)); | ||
1230 | } | 1255 | } |
1231 | 1256 | ||
1232 | // end of sequence test | 1257 | // end of sequence test |
@@ -1302,32 +1327,38 @@ TEST_F(VideoDecHidlTest, SimpleEOSTest) { | |||
1302 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1327 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1303 | 1328 | ||
1304 | // set state to idle | 1329 | // set state to idle |
1305 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1330 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle( |
1306 | kPortIndexInput, kPortIndexOutput, portMode, true); | 1331 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
1332 | kPortIndexOutput, portMode, true)); | ||
1307 | // set state to executing | 1333 | // set state to executing |
1308 | changeStateIdletoExecute(omxNode, observer); | 1334 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1309 | 1335 | ||
1310 | // request EOS at the end | 1336 | // request EOS at the end |
1311 | eleStream.open(mURL, std::ifstream::binary); | 1337 | eleStream.open(mURL, std::ifstream::binary); |
1312 | ASSERT_EQ(eleStream.is_open(), true); | 1338 | ASSERT_EQ(eleStream.is_open(), true); |
1313 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1339 | ASSERT_NO_FATAL_FAILURE(decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, |
1314 | kPortIndexOutput, eleStream, &Info, 0, (int)Info.size(), | 1340 | kPortIndexInput, kPortIndexOutput, |
1315 | portMode[1], false); | 1341 | eleStream, &Info, 0, (int)Info.size(), |
1342 | portMode[1], false)); | ||
1316 | eleStream.close(); | 1343 | eleStream.close(); |
1317 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, | 1344 | ASSERT_NO_FATAL_FAILURE( |
1318 | kPortIndexInput, kPortIndexOutput, portMode[1]); | 1345 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, |
1319 | testEOS(omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, | 1346 | kPortIndexInput, kPortIndexOutput, portMode[1])); |
1320 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr); | 1347 | ASSERT_NO_FATAL_FAILURE(testEOS( |
1321 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1348 | omxNode, observer, &iBuffer, &oBuffer, true, eosFlag, portMode, |
1322 | kPortIndexOutput); | 1349 | portReconfiguration, kPortIndexInput, kPortIndexOutput, nullptr)); |
1350 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, | ||
1351 | kPortIndexInput, kPortIndexOutput)); | ||
1323 | framesReceived = 0; | 1352 | framesReceived = 0; |
1324 | timestampUs = 0; | 1353 | timestampUs = 0; |
1325 | 1354 | ||
1326 | // set state to idle | 1355 | // set state to idle |
1327 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1356 | ASSERT_NO_FATAL_FAILURE( |
1357 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1328 | // set state to executing | 1358 | // set state to executing |
1329 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1359 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1330 | kPortIndexInput, kPortIndexOutput); | 1360 | &oBuffer, kPortIndexInput, |
1361 | kPortIndexOutput)); | ||
1331 | } | 1362 | } |
1332 | 1363 | ||
1333 | // test input/output port flush | 1364 | // test input/output port flush |
@@ -1397,10 +1428,11 @@ TEST_F(VideoDecHidlTest, FlushTest) { | |||
1397 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1428 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1398 | 1429 | ||
1399 | // set state to idle | 1430 | // set state to idle |
1400 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1431 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle( |
1401 | kPortIndexInput, kPortIndexOutput, portMode, true); | 1432 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
1433 | kPortIndexOutput, portMode, true)); | ||
1402 | // set state to executing | 1434 | // set state to executing |
1403 | changeStateIdletoExecute(omxNode, observer); | 1435 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1404 | 1436 | ||
1405 | // Decode 128 frames and flush. here 128 is chosen to ensure there is a key | 1437 | // Decode 128 frames and flush. here 128 is chosen to ensure there is a key |
1406 | // frame after this so that the below section can be convered for all | 1438 | // frame after this so that the below section can be convered for all |
@@ -1408,11 +1440,11 @@ TEST_F(VideoDecHidlTest, FlushTest) { | |||
1408 | int nFrames = 128; | 1440 | int nFrames = 128; |
1409 | eleStream.open(mURL, std::ifstream::binary); | 1441 | eleStream.open(mURL, std::ifstream::binary); |
1410 | ASSERT_EQ(eleStream.is_open(), true); | 1442 | ASSERT_EQ(eleStream.is_open(), true); |
1411 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1443 | ASSERT_NO_FATAL_FAILURE(decodeNFrames( |
1412 | kPortIndexOutput, eleStream, &Info, 0, nFrames, portMode[1], | 1444 | omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, |
1413 | false); | 1445 | kPortIndexOutput, eleStream, &Info, 0, nFrames, portMode[1], false)); |
1414 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1446 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
1415 | kPortIndexOutput); | 1447 | kPortIndexInput, kPortIndexOutput)); |
1416 | framesReceived = 0; | 1448 | framesReceived = 0; |
1417 | 1449 | ||
1418 | // Seek to next key frame and start decoding till the end | 1450 | // Seek to next key frame and start decoding till the end |
@@ -1429,20 +1461,23 @@ TEST_F(VideoDecHidlTest, FlushTest) { | |||
1429 | index++; | 1461 | index++; |
1430 | } | 1462 | } |
1431 | if (keyFrame) { | 1463 | if (keyFrame) { |
1432 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1464 | ASSERT_NO_FATAL_FAILURE( |
1433 | kPortIndexOutput, eleStream, &Info, index, | 1465 | decodeNFrames(omxNode, observer, &iBuffer, &oBuffer, |
1434 | Info.size() - index, portMode[1], false); | 1466 | kPortIndexInput, kPortIndexOutput, eleStream, &Info, |
1467 | index, Info.size() - index, portMode[1], false)); | ||
1435 | } | 1468 | } |
1436 | eleStream.close(); | 1469 | eleStream.close(); |
1437 | flushPorts(omxNode, observer, &iBuffer, &oBuffer, kPortIndexInput, | 1470 | ASSERT_NO_FATAL_FAILURE(flushPorts(omxNode, observer, &iBuffer, &oBuffer, |
1438 | kPortIndexOutput); | 1471 | kPortIndexInput, kPortIndexOutput)); |
1439 | framesReceived = 0; | 1472 | framesReceived = 0; |
1440 | 1473 | ||
1441 | // set state to idle | 1474 | // set state to idle |
1442 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1475 | ASSERT_NO_FATAL_FAILURE( |
1476 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1443 | // set state to executing | 1477 | // set state to executing |
1444 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1478 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1445 | kPortIndexInput, kPortIndexOutput); | 1479 | &oBuffer, kPortIndexInput, |
1480 | kPortIndexOutput)); | ||
1446 | } | 1481 | } |
1447 | 1482 | ||
1448 | int main(int argc, char** argv) { | 1483 | int main(int argc, char** argv) { |
diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp index df90ccce..743ff787 100644 --- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp +++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoEncTest.cpp | |||
@@ -179,6 +179,7 @@ class VideoEncHidlTest : public ::testing::VtsHalHidlTargetTestBase { | |||
179 | this->omxNode = _nl; | 179 | this->omxNode = _nl; |
180 | }) | 180 | }) |
181 | .isOk()); | 181 | .isOk()); |
182 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | ||
182 | ASSERT_NE(omxNode, nullptr); | 183 | ASSERT_NE(omxNode, nullptr); |
183 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; | 184 | ASSERT_NE(gEnv->getRole().empty(), true) << "Invalid Component Role"; |
184 | struct StringToName { | 185 | struct StringToName { |
@@ -617,7 +618,7 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
617 | size_t i = 0; | 618 | size_t i = 0; |
618 | status = | 619 | status = |
619 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); | 620 | observer->dequeueMessage(&msg, DEFAULT_TIMEOUT_Q, iBuffer, oBuffer); |
620 | EXPECT_EQ(status, | 621 | ASSERT_EQ(status, |
621 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); | 622 | android::hardware::media::omx::V1_0::Status::TIMED_OUT); |
622 | // status == TIMED_OUT, it could be due to process time being large | 623 | // status == TIMED_OUT, it could be due to process time being large |
623 | // than DEFAULT_TIMEOUT or component needs output buffers to start | 624 | // than DEFAULT_TIMEOUT or component needs output buffers to start |
@@ -634,7 +635,8 @@ void waitOnInputConsumption(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
634 | // Dispatch an output buffer assuming outQueue.empty() is true | 635 | // Dispatch an output buffer assuming outQueue.empty() is true |
635 | size_t index; | 636 | size_t index; |
636 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 637 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
637 | dispatchOutputBuffer(omxNode, oBuffer, index); | 638 | ASSERT_NO_FATAL_FAILURE( |
639 | dispatchOutputBuffer(omxNode, oBuffer, index)); | ||
638 | timeOut = TIMEOUT_COUNTER_Q; | 640 | timeOut = TIMEOUT_COUNTER_Q; |
639 | } | 641 | } |
640 | } | 642 | } |
@@ -1008,8 +1010,7 @@ void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
1008 | ASSERT_EQ(msg.data.eventData.data2, | 1010 | ASSERT_EQ(msg.data.eventData.data2, |
1009 | OMX_IndexConfigAndroidIntraRefresh); | 1011 | OMX_IndexConfigAndroidIntraRefresh); |
1010 | } else if (msg.data.eventData.event == OMX_EventError) { | 1012 | } else if (msg.data.eventData.event == OMX_EventError) { |
1011 | EXPECT_TRUE(false) << "Received OMX_EventError, not sure why"; | 1013 | ASSERT_TRUE(false) << "Received OMX_EventError, not sure why"; |
1012 | break; | ||
1013 | } else if (msg.data.eventData.event == OMX_EventDataSpaceChanged) { | 1014 | } else if (msg.data.eventData.event == OMX_EventDataSpaceChanged) { |
1014 | // TODO: how am i supposed to respond now? | 1015 | // TODO: how am i supposed to respond now? |
1015 | std::cout << "[ INFO ] OMX_EventDataSpaceChanged \n"; | 1016 | std::cout << "[ INFO ] OMX_EventDataSpaceChanged \n"; |
@@ -1025,8 +1026,13 @@ void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
1025 | if (inputDataIsMeta) { | 1026 | if (inputDataIsMeta) { |
1026 | if (listener->freeBuffers > listener->minUnDequeuedCount) { | 1027 | if (listener->freeBuffers > listener->minUnDequeuedCount) { |
1027 | if (dispatchGraphicBuffer(omxNode, producer, listener, iBuffer, | 1028 | if (dispatchGraphicBuffer(omxNode, producer, listener, iBuffer, |
1028 | portIndexInput, eleStream, timestamp)) | 1029 | portIndexInput, eleStream, |
1029 | break; | 1030 | timestamp)) { |
1031 | if (::testing::Test::HasFailure()) | ||
1032 | ASSERT_TRUE(false); | ||
1033 | else | ||
1034 | break; | ||
1035 | } | ||
1030 | timestamp += timestampIncr; | 1036 | timestamp += timestampIncr; |
1031 | nFrames--; | 1037 | nFrames--; |
1032 | ipCount++; | 1038 | ipCount++; |
@@ -1044,8 +1050,8 @@ void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
1044 | break; | 1050 | break; |
1045 | flags = OMX_BUFFERFLAG_ENDOFFRAME; | 1051 | flags = OMX_BUFFERFLAG_ENDOFFRAME; |
1046 | if (signalEOS && (nFrames == 1)) flags |= OMX_BUFFERFLAG_EOS; | 1052 | if (signalEOS && (nFrames == 1)) flags |= OMX_BUFFERFLAG_EOS; |
1047 | dispatchInputBuffer(omxNode, iBuffer, index, bytesCount, flags, | 1053 | ASSERT_NO_FATAL_FAILURE(dispatchInputBuffer( |
1048 | timestamp); | 1054 | omxNode, iBuffer, index, bytesCount, flags, timestamp)); |
1049 | if (timestampUslist) timestampUslist->push_back(timestamp); | 1055 | if (timestampUslist) timestampUslist->push_back(timestamp); |
1050 | timestamp += timestampIncr; | 1056 | timestamp += timestampIncr; |
1051 | nFrames--; | 1057 | nFrames--; |
@@ -1055,7 +1061,8 @@ void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
1055 | } | 1061 | } |
1056 | // Dispatch output buffer | 1062 | // Dispatch output buffer |
1057 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { | 1063 | if ((index = getEmptyBufferID(oBuffer)) < oBuffer->size()) { |
1058 | dispatchOutputBuffer(omxNode, oBuffer, index); | 1064 | ASSERT_NO_FATAL_FAILURE( |
1065 | dispatchOutputBuffer(omxNode, oBuffer, index)); | ||
1059 | oQueued = true; | 1066 | oQueued = true; |
1060 | } | 1067 | } |
1061 | // Reset Counters when either input or output buffer is dispatched | 1068 | // Reset Counters when either input or output buffer is dispatched |
@@ -1064,8 +1071,7 @@ void encodeNFrames(sp<IOmxNode> omxNode, sp<CodecObserver> observer, | |||
1064 | else | 1071 | else |
1065 | timeOut--; | 1072 | timeOut--; |
1066 | if (timeOut == 0) { | 1073 | if (timeOut == 0) { |
1067 | EXPECT_TRUE(false) << "Wait on Input/Output is found indefinite"; | 1074 | ASSERT_TRUE(false) << "Wait on Input/Output is found indefinite"; |
1068 | break; | ||
1069 | } | 1075 | } |
1070 | // Runtime Param Configuration | 1076 | // Runtime Param Configuration |
1071 | if (ipCount == 15) { | 1077 | if (ipCount == 15) { |
@@ -1137,7 +1143,7 @@ TEST_F(VideoEncHidlTest, BufferSourceCallBacks) { | |||
1137 | xFramerate, eColorFormat); | 1143 | xFramerate, eColorFormat); |
1138 | 1144 | ||
1139 | sp<DummyBufferSource> buffersource = new DummyBufferSource(omxNode); | 1145 | sp<DummyBufferSource> buffersource = new DummyBufferSource(omxNode); |
1140 | EXPECT_NE(buffersource, nullptr); | 1146 | ASSERT_NE(buffersource, nullptr); |
1141 | status = omxNode->setInputSurface(buffersource); | 1147 | status = omxNode->setInputSurface(buffersource); |
1142 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 1148 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
1143 | 1149 | ||
@@ -1151,20 +1157,20 @@ TEST_F(VideoEncHidlTest, BufferSourceCallBacks) { | |||
1151 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 1157 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
1152 | 1158 | ||
1153 | // set state to idle | 1159 | // set state to idle |
1154 | changeStateLoadedtoIdle(omxNode, observer, &buffersource->iBuffer, | 1160 | ASSERT_NO_FATAL_FAILURE(changeStateLoadedtoIdle( |
1155 | &buffersource->oBuffer, kPortIndexInput, | 1161 | omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer, |
1156 | kPortIndexOutput, portMode); | 1162 | kPortIndexInput, kPortIndexOutput, portMode)); |
1157 | // set state to executing | 1163 | // set state to executing |
1158 | changeStateIdletoExecute(omxNode, observer); | 1164 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1159 | testEOS(omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer, | 1165 | ASSERT_NO_FATAL_FAILURE(testEOS(omxNode, observer, &buffersource->iBuffer, |
1160 | false, eosFlag); | 1166 | &buffersource->oBuffer, false, eosFlag)); |
1161 | // set state to idle | 1167 | // set state to idle |
1162 | changeStateExecutetoIdle(omxNode, observer, &buffersource->iBuffer, | 1168 | ASSERT_NO_FATAL_FAILURE(changeStateExecutetoIdle( |
1163 | &buffersource->oBuffer); | 1169 | omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer)); |
1164 | // set state to executing | 1170 | // set state to executing |
1165 | changeStateIdletoLoaded(omxNode, observer, &buffersource->iBuffer, | 1171 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded( |
1166 | &buffersource->oBuffer, kPortIndexInput, | 1172 | omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer, |
1167 | kPortIndexOutput); | 1173 | kPortIndexInput, kPortIndexOutput)); |
1168 | // test for callbacks | 1174 | // test for callbacks |
1169 | EXPECT_EQ(buffersource->callback, 31); | 1175 | EXPECT_EQ(buffersource->callback, 31); |
1170 | } | 1176 | } |
@@ -1218,8 +1224,9 @@ TEST_F(VideoEncHidlTest, EncodeTest) { | |||
1218 | 1224 | ||
1219 | // Configure output port | 1225 | // Configure output port |
1220 | uint32_t nBitRate = 512000; | 1226 | uint32_t nBitRate = 512000; |
1221 | setDefaultPortParam(omxNode, kPortIndexOutput, eCompressionFormat, | 1227 | ASSERT_NO_FATAL_FAILURE( |
1222 | nFrameWidth, nFrameHeight, nBitRate, xFramerate); | 1228 | setDefaultPortParam(omxNode, kPortIndexOutput, eCompressionFormat, |
1229 | nFrameWidth, nFrameHeight, nBitRate, xFramerate)); | ||
1223 | setRefreshPeriod(omxNode, kPortIndexOutput, 0); | 1230 | setRefreshPeriod(omxNode, kPortIndexOutput, 0); |
1224 | 1231 | ||
1225 | unsigned int index; | 1232 | unsigned int index; |
@@ -1255,27 +1262,32 @@ TEST_F(VideoEncHidlTest, EncodeTest) { | |||
1255 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1262 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1256 | 1263 | ||
1257 | // set state to idle | 1264 | // set state to idle |
1258 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1265 | ASSERT_NO_FATAL_FAILURE( |
1259 | kPortIndexInput, kPortIndexOutput, portMode); | 1266 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, |
1267 | kPortIndexInput, kPortIndexOutput, portMode)); | ||
1260 | // set state to executing | 1268 | // set state to executing |
1261 | changeStateIdletoExecute(omxNode, observer); | 1269 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1262 | 1270 | ||
1263 | eleStream.open(mURL, std::ifstream::binary); | 1271 | eleStream.open(mURL, std::ifstream::binary); |
1264 | ASSERT_EQ(eleStream.is_open(), true); | 1272 | ASSERT_EQ(eleStream.is_open(), true); |
1265 | encodeNFrames(omxNode, observer, kPortIndexInput, kPortIndexOutput, | 1273 | ASSERT_NO_FATAL_FAILURE(encodeNFrames( |
1266 | &iBuffer, &oBuffer, 32, xFramerate, | 1274 | omxNode, observer, kPortIndexInput, kPortIndexOutput, &iBuffer, |
1267 | (nFrameWidth * nFrameHeight * 3) >> 1, eleStream, | 1275 | &oBuffer, 32, xFramerate, (nFrameWidth * nFrameHeight * 3) >> 1, |
1268 | ×tampUslist); | 1276 | eleStream, ×tampUslist)); |
1269 | eleStream.close(); | 1277 | eleStream.close(); |
1270 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer); | 1278 | ASSERT_NO_FATAL_FAILURE( |
1271 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag); | 1279 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer)); |
1280 | ASSERT_NO_FATAL_FAILURE( | ||
1281 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag)); | ||
1272 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); | 1282 | if (timestampDevTest) EXPECT_EQ(timestampUslist.empty(), true); |
1273 | 1283 | ||
1274 | // set state to idle | 1284 | // set state to idle |
1275 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1285 | ASSERT_NO_FATAL_FAILURE( |
1286 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1276 | // set state to executing | 1287 | // set state to executing |
1277 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1288 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1278 | kPortIndexInput, kPortIndexOutput); | 1289 | &oBuffer, kPortIndexInput, |
1290 | kPortIndexOutput)); | ||
1279 | } | 1291 | } |
1280 | 1292 | ||
1281 | // test raw stream encode (input is ANW buffers) | 1293 | // test raw stream encode (input is ANW buffers) |
@@ -1304,9 +1316,9 @@ TEST_F(VideoEncHidlTest, EncodeTestBufferMetaModes) { | |||
1304 | 1316 | ||
1305 | // Configure output port | 1317 | // Configure output port |
1306 | uint32_t nBitRate = 512000; | 1318 | uint32_t nBitRate = 512000; |
1307 | setDefaultPortParam(omxNode, kPortIndexOutput, eCompressionFormat, | 1319 | ASSERT_NO_FATAL_FAILURE( |
1308 | nFrameWidth, nFrameHeight, nBitRate, xFramerate); | 1320 | setDefaultPortParam(omxNode, kPortIndexOutput, eCompressionFormat, |
1309 | 1321 | nFrameWidth, nFrameHeight, nBitRate, xFramerate)); | |
1310 | // CreateInputSurface | 1322 | // CreateInputSurface |
1311 | EXPECT_TRUE(omx->createInputSurface( | 1323 | EXPECT_TRUE(omx->createInputSurface( |
1312 | [&](android::hardware::media::omx::V1_0::Status _s, | 1324 | [&](android::hardware::media::omx::V1_0::Status _s, |
@@ -1413,28 +1425,32 @@ TEST_F(VideoEncHidlTest, EncodeTestBufferMetaModes) { | |||
1413 | 1425 | ||
1414 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1426 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1415 | // set state to idle | 1427 | // set state to idle |
1416 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1428 | ASSERT_NO_FATAL_FAILURE( |
1417 | kPortIndexInput, kPortIndexOutput, portMode); | 1429 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, |
1430 | kPortIndexInput, kPortIndexOutput, portMode)); | ||
1418 | // set state to executing | 1431 | // set state to executing |
1419 | changeStateIdletoExecute(omxNode, observer); | 1432 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1420 | 1433 | ||
1421 | eleStream.open(mURL, std::ifstream::binary); | 1434 | eleStream.open(mURL, std::ifstream::binary); |
1422 | ASSERT_EQ(eleStream.is_open(), true); | 1435 | ASSERT_EQ(eleStream.is_open(), true); |
1423 | encodeNFrames(omxNode, observer, kPortIndexInput, kPortIndexOutput, | 1436 | ASSERT_NO_FATAL_FAILURE(encodeNFrames( |
1424 | &iBuffer, &oBuffer, 1024, xFramerate, | 1437 | omxNode, observer, kPortIndexInput, kPortIndexOutput, &iBuffer, |
1425 | (nFrameWidth * nFrameHeight * 3) >> 1, eleStream, nullptr, | 1438 | &oBuffer, 1024, xFramerate, (nFrameWidth * nFrameHeight * 3) >> 1, |
1426 | false, true, producer, listener); | 1439 | eleStream, nullptr, false, true, producer, listener)); |
1427 | eleStream.close(); | 1440 | eleStream.close(); |
1428 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, true, | 1441 | ASSERT_NO_FATAL_FAILURE(waitOnInputConsumption(omxNode, observer, &iBuffer, |
1429 | listener); | 1442 | &oBuffer, true, listener)); |
1430 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag); | 1443 | ASSERT_NO_FATAL_FAILURE( |
1444 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag)); | ||
1431 | 1445 | ||
1432 | // set state to idle | 1446 | // set state to idle |
1433 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1447 | ASSERT_NO_FATAL_FAILURE( |
1448 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1434 | EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers); | 1449 | EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers); |
1435 | // set state to executing | 1450 | // set state to executing |
1436 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1451 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1437 | kPortIndexInput, kPortIndexOutput); | 1452 | &oBuffer, kPortIndexInput, |
1453 | kPortIndexOutput)); | ||
1438 | 1454 | ||
1439 | returnval = producer->disconnect( | 1455 | returnval = producer->disconnect( |
1440 | NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API); | 1456 | NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API); |
@@ -1528,24 +1544,28 @@ TEST_F(VideoEncHidlTest, EncodeTestEOS) { | |||
1528 | 1544 | ||
1529 | android::Vector<BufferInfo> iBuffer, oBuffer; | 1545 | android::Vector<BufferInfo> iBuffer, oBuffer; |
1530 | // set state to idle | 1546 | // set state to idle |
1531 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, | 1547 | ASSERT_NO_FATAL_FAILURE( |
1532 | kPortIndexInput, kPortIndexOutput, portMode); | 1548 | changeStateLoadedtoIdle(omxNode, observer, &iBuffer, &oBuffer, |
1549 | kPortIndexInput, kPortIndexOutput, portMode)); | ||
1533 | // set state to executing | 1550 | // set state to executing |
1534 | changeStateIdletoExecute(omxNode, observer); | 1551 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoExecute(omxNode, observer)); |
1535 | 1552 | ||
1536 | // send EOS | 1553 | // send EOS |
1537 | status = source->signalEndOfInputStream(); | 1554 | status = source->signalEndOfInputStream(); |
1538 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); | 1555 | ASSERT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); |
1539 | waitOnInputConsumption(omxNode, observer, &iBuffer, &oBuffer, true, | 1556 | ASSERT_NO_FATAL_FAILURE(waitOnInputConsumption(omxNode, observer, &iBuffer, |
1540 | listener); | 1557 | &oBuffer, true, listener)); |
1541 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag); | 1558 | ASSERT_NO_FATAL_FAILURE( |
1559 | testEOS(omxNode, observer, &iBuffer, &oBuffer, false, eosFlag)); | ||
1542 | 1560 | ||
1543 | // set state to idle | 1561 | // set state to idle |
1544 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer); | 1562 | ASSERT_NO_FATAL_FAILURE( |
1563 | changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer)); | ||
1545 | EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers); | 1564 | EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers); |
1546 | // set state to executing | 1565 | // set state to executing |
1547 | changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer, | 1566 | ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, |
1548 | kPortIndexInput, kPortIndexOutput); | 1567 | &oBuffer, kPortIndexInput, |
1568 | kPortIndexOutput)); | ||
1549 | 1569 | ||
1550 | returnval = producer->disconnect( | 1570 | returnval = producer->disconnect( |
1551 | NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API); | 1571 | NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API); |