@@ -120,6 +120,9 @@ int main(void)
120
120
121
121
LOG_INF ("Video device: %s" , video_dev -> name );
122
122
123
+ /* Get PxP device */
124
+ const struct device * const transform_dev = DEVICE_DT_GET (DT_NODELABEL (pxp ));
125
+
123
126
/* Get capabilities */
124
127
caps .type = type ;
125
128
if (video_get_caps (video_dev , & caps )) {
@@ -206,6 +209,25 @@ int main(void)
206
209
return 0 ;
207
210
}
208
211
212
+ /* Set format PxP */
213
+ fmt .type = VIDEO_BUF_TYPE_INPUT ;
214
+ if (video_set_format (transform_dev , & fmt )) {
215
+ LOG_ERR ("Unable to set input format for PxP" );
216
+ return 0 ;
217
+ }
218
+ fmt .type = VIDEO_BUF_TYPE_OUTPUT ;
219
+
220
+ struct video_format fmt_out = {.pixelformat = fmt .pixelformat ,
221
+ .width = fmt .height ,
222
+ .height = fmt .width ,
223
+ .type = VIDEO_BUF_TYPE_OUTPUT ,};
224
+
225
+ if (video_set_format (transform_dev , & fmt_out )) {
226
+ LOG_ERR ("Unable to set output format for PxP" );
227
+ return 0 ;
228
+ }
229
+
230
+ /* Get and enumerate frame interval */
209
231
if (!video_get_frmival (video_dev , & frmival )) {
210
232
LOG_INF ("- Default frame rate : %f fps" ,
211
233
1.0 * frmival .denominator / frmival .numerator );
@@ -257,6 +279,11 @@ int main(void)
257
279
video_set_ctrl (video_dev , & ctrl );
258
280
}
259
281
282
+ /* Rotate image 90 degree with PxP */
283
+ ctrl .id = VIDEO_CID_ROTATE ;
284
+ ctrl .val = 90 ;
285
+ video_set_ctrl (transform_dev , & ctrl );
286
+
260
287
#if DT_HAS_CHOSEN (zephyr_display )
261
288
const struct device * const display_dev = DEVICE_DT_GET (DT_CHOSEN (zephyr_display ));
262
289
@@ -265,7 +292,7 @@ int main(void)
265
292
return 0 ;
266
293
}
267
294
268
- err = display_setup (display_dev , fmt .pixelformat );
295
+ err = display_setup (display_dev , fmt_out .pixelformat );
269
296
if (err ) {
270
297
LOG_ERR ("Unable to set up display" );
271
298
return err ;
@@ -292,7 +319,10 @@ int main(void)
292
319
return 0 ;
293
320
}
294
321
buffers [i ]-> type = type ;
295
- video_enqueue (video_dev , buffers [i ]);
322
+
323
+ if (i < 2 ) {
324
+ video_enqueue (video_dev , buffers [i ]);
325
+ }
296
326
}
297
327
298
328
/* Start video capture */
@@ -321,8 +351,44 @@ int main(void)
321
351
}
322
352
#endif
323
353
354
+ /* PxP m2m handling */
355
+ vbuf -> type = VIDEO_BUF_TYPE_INPUT ;
356
+ err = video_enqueue (transform_dev , vbuf );
357
+ if (err ) {
358
+ LOG_ERR ("Unable to enqueue PxP video buf in" );
359
+ return 0 ;
360
+ }
361
+
362
+ buffers [2 ]-> type = VIDEO_BUF_TYPE_OUTPUT ;
363
+ err = video_enqueue (transform_dev , buffers [2 ]);
364
+ if (err ) {
365
+ LOG_ERR ("Unable to enqueue PxP video buf out" );
366
+ return 0 ;
367
+ }
368
+
369
+ /* same start for both input and output */
370
+ if (video_stream_start (transform_dev , VIDEO_BUF_TYPE_INPUT )) {
371
+ LOG_ERR ("Unable to start PxP" );
372
+ return 0 ;
373
+ }
374
+
375
+ err = video_dequeue (transform_dev , & vbuf , K_FOREVER );
376
+ if (err ) {
377
+ LOG_ERR ("Unable to dequeue PxP video buf in" );
378
+ return 0 ;
379
+ }
380
+
381
+ // buffers[2]->type = VIDEO_BUF_TYPE_OUTPUT; => rework buffer management
382
+ struct video_buffer * vbuf_out = & (struct video_buffer ){};
383
+ vbuf_out -> type = VIDEO_BUF_TYPE_OUTPUT ;
384
+ err = video_dequeue (transform_dev , & vbuf_out , K_FOREVER );
385
+ if (err ) {
386
+ LOG_ERR ("Unable to dequeue PxP video buf out" );
387
+ return 0 ;
388
+ }
389
+
324
390
#if DT_HAS_CHOSEN (zephyr_display )
325
- video_display_frame (display_dev , vbuf , fmt );
391
+ video_display_frame (display_dev , vbuf_out , fmt_out );
326
392
#endif
327
393
328
394
err = video_enqueue (video_dev , vbuf );
0 commit comments