📄 prp_test.c~
字号:
#include <stdio.h>#include <fcntl.h>#include <linux/fb.h>#include <asm/mman.h>#include "type.h"#include "mx21_pp.h"#include "prp.h"#define DISP_BUFF_SIZE 320*240*2#define IN_IMG_WIDTH 320//352#define IN_IMG_HIGHT 240//288#define IN_IMG_BUFFER_SIZE IN_IMG_WIDTH*IN_IMG_HIGHT*3/2#define OUT_IMG_WIDTH 320#define OUT_IMG_HIGHT 240#define OUT_IMG_BUFFER_SIZE OUT_IMG_WIDTH*OUT_IMG_HIGHT*2IOBUFFER strIoBuffer;SIZE_INFO decoder_size;unsigned char input_buff[IN_IMG_BUFFER_SIZE] = {0};unsigned char output_buff[OUT_IMG_BUFFER_SIZE] = {0};static double msecond(){ struct timeval tv; gettimeofday(&tv, 0); return (tv.tv_sec * 1.0e3 + tv.tv_usec * 1.0e-3);}int main(int argc, char **argv){ int i, j; int fd_pp; int fb; int fd_prp; int ret; FILE *fp; double enctime; unsigned short *pbuff; unsigned short *ptr; if ((fd_prp = open("/dev/csi_prp", O_RDWR)) < 0) { printf("Device csi_prp open error !\n"); exit(-1); } else printf("Device mx21_prp open successfully !\n"); fp=fopen("mine.rgb","wb"); /**********************************************************************/ prpConfigData_t prpConfig; prpConfig.ch1Loop=true; prpConfig.ch2Loop=true; prpConfig.enableWindow=false; prpConfig.ch2FlowControl=true; prpConfig.inputFormat=FORMAT_YUV422; prpConfig.ch1OutFormat=FORMAT_YUV422; prpConfig.ch2OutFormat=FORMAT_YUV420; prpConfig.in_width=640; prpConfig.in_height=480; prpConfig.ch1_width=320; prpConfig.ch1_height=240; prpConfig.ch1_stride=480; //stride以byte为单位 prpConfig.ch2_width=320; prpConfig.ch2_height=240; prpConfig.ch1_rz_hori_ratio=RZ_AVG_RATIO_2_1; prpConfig.ch1_rz_vert_ratio=RZ_AVG_RATIO_2_1; prpConfig.ch2_rz_hori_ratio=RZ_AVG_RATIO_2_1; prpConfig.ch2_rz_vert_ratio=RZ_AVG_RATIO_2_1; ioctl(fd_prp,IOCTL_EMMA_PRP_RESET,NULL); //reset ioctl(fd_prp,IOCTL_EMMA_PRP_CONFIG,&prpConfig); //config ioctl(fd_prp,IOCTL_EMMA_PRP_START,NULL); //start ioctl(fd_prp,IOCTL_EMMA_PRP_START_CHANNEL_2,NULL); //ch2 enable ioctl(fd_prp,IOCTL_EMMA_PRP_STATUS,NULL); //print regs value /**********************************************************************//* if ((fd_pp = open("/dev/mx21_pp", O_RDWR)) < 0) { printf("Device pp open error !\n"); exit(-1); } else printf("Device mx21_pp open successfully !\n"); if ((fb = open("/dev/fb0", O_RDWR)) < 0) { printf("Device mem device !\n"); exit(-1); } pbuff = mmap(NULL, DISP_BUFF_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0); if(pbuff==NULL) { printf("Map errror\n"); } decoder_size.x_max = IN_IMG_WIDTH; decoder_size.y_max = IN_IMG_HIGHT; ioctl(fd_pp,PP_CMD_INIT,&decoder_size);*/ while(1) { enctime = msecond(); if ((ret = read(fd_prp, input_buff, IN_IMG_BUFFER_SIZE)) < 0) { //printf("No available image!\n"); continue; } fwrite(input_buff,1,IN_IMG_BUFFER_SIZE,fp);/* strIoBuffer.pSrc = input_buff; strIoBuffer.pDest = output_buff; enctime = msecond(); ioctl(fd_pp,PP_CMD_START,&strIoBuffer); enctime = msecond() - enctime; ptr = (unsigned short *)output_buff; for(i=0;i<240;i++) { for(j=0;j<320;j++) { pbuff[j*240 + i ]= *ptr++; } }*/ enctime = msecond() - enctime; printf("frame interval is %6.2fms\n",enctime); } close(fd_prp);// close(fd_pp);// close(fb); fclose(fp); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -