| 18 | |
| 19 | == Analysis == |
| 20 | * Failures |
| 21 | {{{ |
| 22 | The streaming fails due to the following. |
| 23 | 1) You can't first start streaming and then call pcilib_start. First |
| 24 | camera should be started, then, streaming call is allowed. I have |
| 25 | changed 'uca_ufo_camera_start_recording' on ipecamera4 to fix the |
| 26 | procedure. |
| 27 | 2) On multicore, if the variable can be changed by other thread, you |
| 28 | should declare it 'volatile' to avoid gcc optimizations. I have modified |
| 29 | declaration of 'n_acquired_frames' in 'grab_frames_async' to |
| 30 | volatile guint n_acquired_frames = 0; |
| 31 | |
| 32 | |
| 33 | I can't reproduce the problems with software triggering in 10bit mode on |
| 34 | ipecamera4: |
| 35 | ipecamera4:~ # uca-benchmark --num-runs=1 --num-frames=1000 |
| 36 | --test-software ufo |
| 37 | [ sync ] [ auto ] 61.55 Hz 492.42 MB/s |
| 38 | [ sync ] [ software ] 85.63 Hz 685.03 MB/s |
| 39 | |
| 40 | However, there is another bug in UCA which may cause it while switching |
| 41 | between sync and async modes. It seems you never clear 'async' mode. So |
| 42 | if after async test the sync test will be called, the grab_frames_sync |
| 43 | will start asynchronous reading thread and will try to call grab |
| 44 | synchronously as well. I.e. you need to clear asynchronous mode. I don't |
| 45 | know how you planed to do it, so I have not fixed it. |
| 46 | |
| 47 | Also, I noticed that in "[ async ] [ software ]" and "[ async ] [ |
| 48 | external ]" modes, you actually calling sync variant. As I have not seen |
| 49 | any software triggering code in grab_async, I guess this is just not |
| 50 | implemented yet. But it is quite confused and better complain that mode |
| 51 | is not implemented when give sync results instead. |
| 52 | }}} |
| 53 | * Low performance is actually due to frame corruption in the hardware explained in [ticket:239] |