⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encode.c~

📁 cam ui application for linux
💻 C~
📖 第 1 页 / 共 5 页
字号:
        DPrintf("JPEG encoding size %dx%d...\n", tEncodeParam.dwWidth, tEncodeParam.dwHeight);        Err = pthread_create(&pidEncodeThreadID, NULL/*&attr*/, (void *)EncodeJPEGThreadProc, &tEncodeParam);        if (Err)        {            DPrintf("error creating thread. (%d)", Err);            goto ravi1;        }    }#endif //JPEG_ENC//Add By Willam 2007-11-5 14:40:14    //ql201_osd_exit();   // ql201_osd_init(LUT1BIT_352X240,VID_ENCODE);        Err= ioctl(hEncDev, VIDIOC_STREAMON, &type);    if(!Err)     {    	       //Add By Willam 2007-11-5 14:40:14 	Enable_VO();  //enable VO manually here        //osd_text_show(TIMESTMP_X - FONT_WIDTH, TIMESTMP_Y_0, FName+0x0b,OSD_RED);                           		#if 0 //def TEST_OSD        //test_osd_start(hEncDev);#endif //TEST_OSD			system("testapp3 wrreg 0 a33f");        while(!Err)         {            v4lbuf.type 	= V4L2_BUF_TYPE_VIDEO_CAPTURE;            v4lbuf.memory = V4L2_MEMORY_MMAP;			            Err= ioctl(hEncDev, VIDIOC_DQBUF, &v4lbuf);            if(!Err)             {                retrycnt= 0;				#ifdef TEST_OSD               // test_osd_update();#endif //TEST_OSD                ulTotolCaptured += v4lbuf.bytesused;                if(v4lbuf.bytesused&0xFFF) framescnt++;                                ulActuCurrXfer= v4lbuf.bytesused;                ulActuTotalXfer+= ulActuCurrXfer;                if(fd) {                    ql201_endianswap((unsigned long *)v4lbuf.m.userptr, v4lbuf.bytesused);                    fwrite((void*)v4lbuf.m.userptr, 1, v4lbuf.bytesused, fd);		#ifdef	FRANK_TEST		    fflush(fd);		#endif                }                tElapsedTime= time(0)-tStartTime;	#ifdef	FRANK_TEST		if ((capturetimeout == 0) && (tElapsedTime != 0)){			if (v4lbuf.flags == V4L2_BUF_FLAG_KEYFRAME)				DPrintf("Got I frame\n");			if ((tElapsedTime%ENCODE_INTERVAL == 0) && (times == 0) ){			#ifndef	NO_INDX_FILE    				if(fdIdx) {        				//fflush(fdIdx);        				fclose(fdIdx);        				fdIdx= 0;    				}			#endif			    				if(fd) {       				fflush(fd);        				fclose(fd);        				fd= 0;    				}				times = 1;				hook_4_encode_file(file_name);			}else if(fd == 0){        			fd = fopen( file_name, "w+" );        			if( fd == NULL ) {            				DPrintf("Unable to open file %s \n", file_name);            				exit(1);        			}			#ifndef	NO_INDX_FILE					strcpy(FNameIdx, file_name);            			strcat(FNameIdx, ".idx");            			fdIdx = fopen( FNameIdx, "w+" );            			if( fdIdx == NULL ) {                			fclose(fd);                			DPrintf("Unable to open file %s \n", FNameIdx);                			exit(1);            			}			#endif							hook_4_encode_check();			}else if((tElapsedTime%ENCODE_INTERVAL != 0) && times){				times = 0;			}					}	#endif                 DPrintf("\r fm(0x%x) %02d:%02d:%02d - %d MB, ~Rate=%05d Kbps, fps=%d(%d),Idx=%dK,Vbi=%dK ", v4lbuf.flags,                       tElapsedTime/3600, (tElapsedTime/60)%60, tElapsedTime%60, ulActuTotalXfer/(1024*1024),                        //(tElapsedTime ? (DWORD)((unsigned long long)(ulActuTotalXfer*8)/(1000*tElapsedTime)) : 0),                       (tElapsedTime ? (((ulActuTotalXfer/tElapsedTime)*8)/1000) : 0),                       (tElapsedTime ? (framescnt/tElapsedTime) : 0), framescnt,                         (indexsize/1024), (vbisize/1024) );                if(pktcnt) {                    DPrintf("pkt=%05d(%04d) ", pktcnt, (ulActuTotalXfer/pktcnt));                }                if((capturetimeout && (tElapsedTime>=capturetimeout)) /*|| (get_keypad() == KEY_OK)*/) {                    bCtrlCReceived = TRUE;                }                fflush(stdout);                // done with the buffer, return it back to the driver                Err= ioctl(hEncDev, VIDIOC_QBUF, &v4lbuf);				                if(Err) {                    DPrintf("QBUF ioctl failed %d %s\n", errno, strerror(errno));                }            } else             {                if(errno==EAGAIN)                 {                    if(bStopped)                     {                        Err= 0;                        break; //EOS                    } else                    {                        Err= 0; //continue if driver doesn't have data                    }                }                DPrintf("\nDQBUF ioctl failed errno=%d, %s", errno, strerror(errno));                if(retrycnt++ >= MAX_RETRY_COUNT)                  { //something is wrong! so exit now                    bStopped= TRUE;                    type = V4L2_BUF_TYPE_VIDEO_CAPTURE;                    Err= ioctl(hEncDev, VIDIOC_STREAMOFF, &type);                    if(Err==-1)                     {                        DPrintf("\nSTREAMOFF ioctl returns Err=%d, errnot=%d %s\n", Err, errno, strerror(errno));                    }                    Err= 1; //We have to return an error condition                    break;                }            }                        if(bCtrlCReceived && !bStopped)             {                bStopped= TRUE;                bCtrlCReceived = FALSE;                DPrintf("CTRL+C received. Calling STREAMOFF \n");                type = V4L2_BUF_TYPE_VIDEO_CAPTURE;                Err= ioctl(hEncDev, VIDIOC_STREAMOFF, &type);                if(Err==-1) {                    DPrintf("STREAMOFF ioctl returns Err=%d, errnot=%d %s\n", Err, errno, strerror(errno));                }                //break;            }else if(nKey == KEY_MENU)(get_keypad() == KEY_MENU)            {                bStopped= TRUE;                DPrintf("Stop key received. Calling STREAMOFF \n");                type = V4L2_BUF_TYPE_VIDEO_CAPTURE;                Err= ioctl(hEncDev, VIDIOC_STREAMOFF, &type);                if(Err==-1)                 {                    DPrintf("STREAMOFF ioctl returns Err=%d, errnot=%d %s\n", Err, errno, strerror(errno));                }		 stop_mode = 1;            }            if(fdIdx && outbuff)             { //Read and Save Index Data                if( (lastindexreadtime!=tElapsedTime) || (bStopped)) {                    lastindexreadtime= tElapsedTime;                    Err= ioctl(hEncDev, QL201_DIAG_G_INDEX, &UserIdxData);                    if(errno==-EAGAIN) {                        lastindexreadtime+= 1;                    } else {                        lastindexreadtime= 0; //If data is read, let's try reading again                    }                    if(!Err && UserIdxData.validsize) {                        ql201_endianswap((unsigned long *)outbuff, UserIdxData.validsize);                        fwrite(outbuff, 1, UserIdxData.validsize, fdIdx);                        indexsize+=  UserIdxData.validsize;                        fflush(fdIdx);                        if(capturingmp4) {                            //qt_process_index_data(0, outbuff, UserIdxData.validsize);                        }                    }                    Err= 0; //Remove any error condition                }            }            if((vbi_format.Enable==1) && fdVbi && vbioutbuff)             { //Read and Save VBI Data                if( (lastvbireadtime!=tElapsedTime) || (bStopped))                 {                    lastvbireadtime= tElapsedTime;                    Err= ioctl(hEncDev, QL201_ENC_G_VBI_DATA, &UserVbiData);                    //DPrintf("\nVBI Currsize=%x, Err=%d errnot=%d %s \n", UserVbiData.validsize, Err, errno, strerror(errno));                    if(errno==-EAGAIN) {                        lastvbireadtime+= 1;                    } else {                        lastvbireadtime= 0; //If data is read, let's try reading again                    }                    if(!Err && UserVbiData.validsize) {                        fwrite(vbioutbuff, 1, UserVbiData.validsize, fdVbi);                        vbisize+=  UserVbiData.validsize;                        fflush(fdVbi);                    }                    Err= 0; //Remove any error condition                }            }	                        usleep(10);     // to reduce cpu usage		        }    } else {        DPrintf("STREAMON ioctl failed %d %s\n", errno, strerror(errno));    }ravi1:#if 0 //def TEST_OSD    test_osd_stop();#endif //TEST_OSD#ifdef JPEG_ENC    if (doJpeg) {         DPrintf("Wait for jpeg encode thread exit\n");          if (pthread_join(pidEncodeThreadID, NULL))         {                DPrintf("error joining thread.");         }         DPrintf("Jpeg encode thread exited\n");         //pthread_detach(pidEncodeThreadID);      }#endif //JPEG_ENC   //Add by Willam 2007-11-5 14:44:19  // ql201_osd_exit();   //ql201_osd_init(RGB24BIT_352X240,VID_BYPASS);       if(capturingmp4) {        DPrintf("\n");        //qt_fini(0, ulTotolCaptured, FName);    }    if(hEncDev) {        close(hEncDev);        hEncDev= 0;    }    if(loop_forever) {        DPrintf("\n");        DPrintf("\n");        DPrintf("Moiving on to next iteration\n");        goto start_again;    }    if(fdIdx) {        fflush(fdIdx);        fclose(fdIdx);        fdIdx= 0;    }    if(fd) {        fflush(fd);        fclose(fd);        fd= 0;    }    DPrintf("\n");#ifdef JPEG_ENC    if (doJpeg)   pthread_exit(NULL);#endif //JPEG_ENC    if (stop_mode) Err = 16;    return Err;}#elselong EncodeAndStreamv4(char *FName, unsigned int capturetimeout, int doJpeg) {    long Err= 0;    int  Recording=0;      int   nKey=KEY_NO_KEY;    int   strmnum=QLSTRM_ENC;        char FNameIdx[256]="Disabled";    char FNameVbi[256]="Disabled";    unsigned char Time[15];            FILE *fd= 0, *fdIdx= 0, *fdVbi;    unsigned long nCount= 0, ulTotolCaptured= 0;    int bStopped= FALSE;    int send_s;              /* Sockets for sending and receiving. */    struct sockaddr_in mcast_group;    struct utsname name;    unsigned long /*ulTotalXfer= 0, ulCurrXfer= 0,*/ ulActuTotalXfer= 0, ulActuCurrXfer= 0, mcastaddr= 0, ulMTU= 1316, pktcnt= 0;    STREAMING_INFO StrmInfo= { 0 };    time_t tStartTime, tElapsedTime,prev_time = 0;    unsigned int framescnt= 0;    unsigned int lastindexreadtime= 0, indexsize= 0;    unsigned int lastvbireadtime= 0, vbisize= 0;    int retrycnt= 0, capturingmp4= 0;    char *pDevName;    char *outbuff;    char *vbioutbuff;    QL201_INEX_DATA UserIdxData;    QL201_INEX_DATA UserVbiData;    QP_VBI_DATAFORMAT vbi_format;    struct v4l2_buffer v4lbuf;    int type;    QL_LATENCY_INFO latency_info;    unsigned long framesize;    unsigned long fz;    unsigned long ftotal;    #ifdef JPEG_ENC    TEncodeTaskParameters tEncodeParam;    pthread_t pidEncodeThreadID;    int iPolicy;#endif //JPEG_ENC#ifdef Rick_TEST_STORE	pthread_t pidStoreThreadID;	int store_case;	int idx_store_case;#endif    int mode;    int stop_mode = 0;        vbi_format.Enable= 0;    signal(SIGINT, (void*)SigIntHanlder);   //Create  the new File to encode     if (!doJpeg)     {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -