1313#include < cstdlib>
1414#include < vector>
1515#include < cstdint>
16+ #include < chrono>
17+ #include < thread>
18+
19+ #include < opencv2/opencv.hpp>
20+
1621
1722#define def_bridge_simple (Name ) \
1823 extern " C" bridge_tensor_t Name (bridge_tensor_t input) { \
@@ -264,6 +269,16 @@ extern "C" bridge_tensor_t imagenet_normalize(bridge_tensor_t input) {
264269 return torch_to_bridge (output);
265270}
266271
272+
273+ extern " C" bridge_tensor_t add_two_arrays (bridge_tensor_t a, bridge_tensor_t b) {
274+ torch::Tensor t_a = bridge_to_torch (a);
275+ torch::Tensor t_b = bridge_to_torch (b);
276+
277+ torch::Tensor output = t_a + t_b;
278+
279+ return torch_to_bridge (output);
280+ }
281+
267282// extern "C" bridge_tensor_t capture_webcam_bridge(int cam_index) {
268283// torch::Tensor image = capture_webcam(cam_index);
269284// return torch_to_bridge(image);
@@ -371,3 +386,55 @@ extern "C" float sumArray(float* arr, int* sizes, int dim) {
371386 // auto t = torch::from_blob(arr, shape, torch::kFloat);
372387 // return t.sum().item<float>();
373388}
389+
390+
391+ extern " C" void split_loop (int64_t idx, int64_t n) {
392+ for (int i = 0 ; i < n; ++i) {
393+ std::cout << " idx(" << idx << " ," << n << " ) = " << i << std::endl;
394+ std::cout.flush ();
395+ }
396+ }
397+
398+ extern " C" void split_loop_filler (int64_t n,int64_t * ret) {
399+ for (int i = 0 ; i < n; ++i) {
400+ *ret = i;
401+ std::this_thread::sleep_for (std::chrono::seconds (0 ));
402+ }
403+ }
404+
405+
406+
407+ cv::VideoCapture open_camera (int cam_index) {
408+ cv::VideoCapture cap (cam_index, cv::CAP_AVFOUNDATION);
409+ if (!cap.isOpened ()) {
410+ std::cerr << " Could not open camera index " << cam_index << std::endl;
411+ return cv::VideoCapture ();
412+ }
413+ cap.set (cv::CAP_PROP_BUFFERSIZE, 1 ); // minimal internal buffering
414+ cap.set (cv::CAP_PROP_FPS, 60 ); // request higher FPS if possible
415+ return cap;
416+ }
417+
418+
419+ extern " C" void show_webcam (void ) {
420+ cv::VideoCapture cap;
421+ cap = open_camera (0 );
422+
423+ cv::Mat frame_bgr;
424+
425+ while (true ) {
426+ if (!cap.read (frame_bgr) || frame_bgr.empty ()) {
427+ std::cerr << " [WARN] Empty frame, exiting" << std::endl;
428+ break ;
429+ }
430+
431+ cv::imshow (" webcam" , frame_bgr);
432+
433+ if (cv::waitKey (1 ) == 27 ) { // ESC key
434+ break ;
435+ }
436+ }
437+
438+ cap.release ();
439+ cv::destroyAllWindows ();
440+ }
0 commit comments