| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <unistd.h>
- #include <string.h>
- #include "sp_vio.h"
- int main() {
- const int out_w = 1920;
- const int out_h = 1080;
- int widths[] = {out_w};
- int heights[] = {out_h};
- sp_sensors_parameters parms0;
- memset(&parms0, 0, sizeof(parms0));
- parms0.fps = -1;
- parms0.raw_width = 1920;
- parms0.raw_height = 1080;
- sp_sensors_parameters parms1;
- memset(&parms1, 0, sizeof(parms1));
- parms1.fps = -1;
- parms1.raw_width = 1920;
- parms1.raw_height = 1080;
- void *vio0 = sp_init_vio_module();
- void *vio1 = sp_init_vio_module();
- if (!vio0 || !vio1) {
- printf("[Error] sp_init_vio_module failed! vio0=%p vio1=%p\n", vio0, vio1);
- return -1;
- }
- // camera0: host0
- int ret0 = sp_open_camera_v2(vio0, 0, 0, 1, &parms0, widths, heights);
- printf("sp_open_camera_v2 cam0(host0) ret=%d\n", ret0);
- // camera1: host1
- int ret1 = sp_open_camera_v2(vio1, 0, 1, 1, &parms1, widths, heights);
- printf("sp_open_camera_v2 cam1(host1) ret=%d\n", ret1);
- if (ret0 != 0 || ret1 != 0) {
- printf("[Error] open failed: ret0=%d ret1=%d\n", ret0, ret1);
- if (vio0) {
- sp_vio_close(vio0);
- sp_release_vio_module(vio0);
- }
- if (vio1) {
- sp_vio_close(vio1);
- sp_release_vio_module(vio1);
- }
- return -2;
- }
- usleep(500 * 1000); // 等半秒让底层稳定
- int frame_size = out_w * out_h * 3 / 2; // NV12
- char *buf0 = (char *)malloc(frame_size);
- char *buf1 = (char *)malloc(frame_size);
- if (!buf0 || !buf1) {
- printf("[Error] malloc failed!\n");
- sp_vio_close(vio0);
- sp_vio_close(vio1);
- sp_release_vio_module(vio0);
- sp_release_vio_module(vio1);
- return -3;
- }
- memset(buf0, 0, frame_size);
- memset(buf1, 0, frame_size);
- int g0 = sp_vio_get_frame(vio0, buf0, out_w, out_h, 2000);
- int g1 = sp_vio_get_frame(vio1, buf1, out_w, out_h, 2000);
- printf("sp_vio_get_frame cam0 ret=%d\n", g0);
- printf("sp_vio_get_frame cam1 ret=%d\n", g1);
- if (g0 == 0) {
- FILE *fp0 = fopen("cam0_1920x1080_nv12.yuv", "wb");
- if (fp0) {
- fwrite(buf0, 1, frame_size, fp0);
- fclose(fp0);
- printf("saved cam0_1920x1080_nv12.yuv\n");
- }
- }
- if (g1 == 0) {
- FILE *fp1 = fopen("cam1_1920x1080_nv12.yuv", "wb");
- if (fp1) {
- fwrite(buf1, 1, frame_size, fp1);
- fclose(fp1);
- printf("saved cam1_1920x1080_nv12.yuv\n");
- }
- }
- free(buf0);
- free(buf1);
- sp_vio_close(vio0);
- sp_vio_close(vio1);
- sp_release_vio_module(vio0);
- sp_release_vio_module(vio1);
- printf("done\n");
- return 0;
- }
|