1818
1919namespace
2020{
21+ const char * capture_status_name (omniseer::vision::CaptureStatus status)
22+ {
23+ using omniseer::vision::CaptureStatus;
24+ switch (status)
25+ {
26+ case CaptureStatus::Ok:
27+ return " ok" ;
28+ case CaptureStatus::NoFrame:
29+ return " no-frame" ;
30+ case CaptureStatus::RetryableError:
31+ return " retryable-error" ;
32+ case CaptureStatus::FatalError:
33+ return " fatal-error" ;
34+ }
35+ return " unknown" ;
36+ }
37+
2138 uint32_t env_u32 (const char * key, uint32_t def)
2239 {
2340 const char * v = std::getenv (key);
@@ -130,16 +147,25 @@ TEST(RgaPreprocess, LetterboxPaddingIs114_RealV4l2Frame)
130147
131148 omniseer::vision::FrameDescriptor src{};
132149 bool got = false ;
150+ omniseer::vision::CaptureResult last{};
133151 for (int spins = 0 ; spins < 2000 ; ++spins)
134152 {
135- if (cap.dequeue (src))
153+ last = cap.dequeue (src);
154+ if (last.ok ())
136155 {
137156 got = true ;
138157 break ;
139158 }
159+ if (last.status != omniseer::vision::CaptureStatus::NoFrame &&
160+ last.status != omniseer::vision::CaptureStatus::RetryableError)
161+ {
162+ FAIL () << " dequeue failed with status=" << capture_status_name (last.status )
163+ << " errno=" << last.sys_errno << " (" << std::strerror (last.sys_errno ) << " )" ;
164+ }
140165 std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
141166 }
142- ASSERT_TRUE (got) << " timeout waiting for frame (dequeue kept returning EAGAIN)" ;
167+ ASSERT_TRUE (got) << " timeout waiting for frame (status=" << capture_status_name (last.status )
168+ << " , errno=" << last.sys_errno << " )" ;
143169
144170 ASSERT_EQ (src.fmt , omniseer::vision::PixelFormat::NV12 );
145171 ASSERT_EQ (src.num_planes , 2u );
@@ -159,8 +185,6 @@ TEST(RgaPreprocess, LetterboxPaddingIs114_RealV4l2Frame)
159185 omniseer::vision::DmaHeapAllocator alloc;
160186 omniseer::vision::AllocatedImageBuffer allocated =
161187 alloc.allocate (dst_w, dst_h, omniseer::vision::PixelFormat::RGB888 );
162- if (!allocated.valid ())
163- GTEST_SKIP () << " failed to allocate RGB DMA-BUF via dma-heap" ;
164188 dst = allocated.buf ;
165189 dst_alloc = std::move (allocated.alloc );
166190 }
@@ -177,10 +201,14 @@ TEST(RgaPreprocess, LetterboxPaddingIs114_RealV4l2Frame)
177201 .pad_value = 114 ,
178202 });
179203
180- ASSERT_TRUE (stage.prefill (dst));
204+ ASSERT_NO_THROW (stage.prefill (dst));
181205
182206 omniseer::vision::LetterboxMeta meta{};
183- ASSERT_TRUE (stage.run (src, dst, &meta));
207+ const auto preflight_result = stage.preflight (src, dst, &meta);
208+ ASSERT_TRUE (preflight_result.ok ());
209+
210+ const auto run_result = stage.run (src, dst);
211+ ASSERT_TRUE (run_result.ok ());
184212
185213 EXPECT_EQ (meta.resized_w , 640 );
186214 EXPECT_EQ (meta.resized_h , 360 );
@@ -211,7 +239,10 @@ TEST(RgaPreprocess, LetterboxPaddingIs114_RealV4l2Frame)
211239
212240 dmabuf_sync (dst.planes [0 ].fd , DMA_BUF_SYNC_END | DMA_BUF_SYNC_READ );
213241
214- ASSERT_NO_THROW (cap.requeue (src.v4l2_index ));
242+ const omniseer::vision::CaptureResult rq = cap.requeue (src.v4l2_index );
243+ ASSERT_TRUE (rq.ok ()) << " requeue failed with status=" << capture_status_name (rq.status )
244+ << " errno=" << rq.sys_errno << " (" << std::strerror (rq.sys_errno )
245+ << " )" ;
215246 ASSERT_NO_THROW (cap.stop ());
216247}
217248
@@ -238,7 +269,7 @@ TEST(RgaPreprocess, RejectsInvalidDescriptors)
238269 src.num_planes = 2 ;
239270 src.planes [0 ].fd = 0 ;
240271 src.planes [1 ].fd = 0 ;
241- EXPECT_FALSE (stage.run (src, dst));
272+ EXPECT_FALSE (stage.preflight (src, dst). ok ( ));
242273 }
243274
244275 {
@@ -248,7 +279,7 @@ TEST(RgaPreprocess, RejectsInvalidDescriptors)
248279 src.fmt = omniseer::vision::PixelFormat::NV12 ;
249280 src.num_planes = 1 ;
250281 src.planes [0 ].fd = 0 ;
251- EXPECT_FALSE (stage.run (src, dst));
282+ EXPECT_FALSE (stage.preflight (src, dst). ok ( ));
252283 }
253284
254285 {
@@ -259,7 +290,7 @@ TEST(RgaPreprocess, RejectsInvalidDescriptors)
259290 src.num_planes = 2 ;
260291 src.planes [0 ].fd = 0 ;
261292 src.planes [1 ].fd = 1 ;
262- EXPECT_FALSE (stage.run (src, dst));
293+ EXPECT_FALSE (stage.preflight (src, dst). ok ( ));
263294 }
264295
265296 {
@@ -272,7 +303,7 @@ TEST(RgaPreprocess, RejectsInvalidDescriptors)
272303 src.planes [1 ].fd = 0 ;
273304 src.planes [0 ].stride = 1280 ;
274305 src.planes [1 ].offset = static_cast <uint32_t >(1280u * 720u + 1u );
275- EXPECT_FALSE (stage.run (src, dst));
306+ EXPECT_FALSE (stage.preflight (src, dst). ok ( ));
276307 }
277308
278309 {
@@ -288,7 +319,7 @@ TEST(RgaPreprocess, RejectsInvalidDescriptors)
288319
289320 omniseer::vision::ImageBuffer bad_dst = dst;
290321 bad_dst.planes [0 ].stride = 640 * 3 + 1 ;
291- EXPECT_FALSE (stage.run (src, bad_dst));
322+ EXPECT_FALSE (stage.preflight (src, bad_dst). ok ( ));
292323 }
293324
294325 // No additional configuration error cases: RgaPreprocess is RGB888-only.
0 commit comments