int video_init (dtvideo_context_t * vctx) { int ret = 0; dt_info (TAG, "[%s:%d] dtvideo_mgt start init\n", __FUNCTION__, __LINE__); //call init vctx->video_status = VIDEO_STATUS_INITING; vctx->current_pts = vctx->last_valid_pts = -1; dtvideo_decoder_t *video_dec = &vctx->video_dec; dtvideo_filter_t *video_filt = &vctx->video_filt; dtvideo_output_t *video_out = &vctx->video_out; //vf ctx init //vf will init in vd but used in vo memset (video_filt, 0, sizeof (dtvideo_filter_t)); memcpy (&video_filt->para, &vctx->video_para, sizeof (dtvideo_para_t)); video_filt->parent = vctx; //vd ctx init memset (video_dec, 0, sizeof (dtvideo_decoder_t)); memcpy (&video_dec->para, &vctx->video_para, sizeof (dtvideo_para_t)); video_dec->parent = vctx; ret = video_decoder_init (video_dec); if (ret < 0) goto err1; dt_info (TAG, "[%s:%d] vdecoder init ok\n", __FUNCTION__, __LINE__); //vo ctx init memset (video_out, 0, sizeof (dtvideo_output_t)); memcpy (&(video_out->para), &(vctx->video_para), sizeof (dtvideo_para_t)); video_out->parent = vctx; ret = video_output_init (video_out, vctx->video_para.video_output); if (ret < 0) goto err2; vctx->video_status = VIDEO_STATUS_INITED; dt_info (TAG, "dtvideo init ok,status:%d \n", vctx->video_status); return 0; err1: dt_info (TAG, "[%s:%d]video decoder init failed \n", __FUNCTION__, __LINE__); return -1; err2: video_decoder_stop (video_dec); dt_info (TAG, "[%s:%d]video output init failed \n", __FUNCTION__, __LINE__); return -3; }
/* ------------------------------------------------------------ */ int main() { list_audio_devices(alcGetString(NULL, ALC_DEVICE_SPECIFIER)); /* BBBIOlib init*/ iolib_init(); iolib_setdir(8,11, BBBIO_DIR_IN); /* Button */ iolib_setdir(8,12, BBBIO_DIR_OUT); /* LED */ // sys_info.capability = SYS_CAPABILITY_VIDEO_Tx | SYS_CAPABILITY_VIDEO_Rx | SYS_CAPABILITY_AUDIO_Tx | SYS_CAPABILITY_AUDIO_Rx; // sys_info.capability = SYS_CAPABILITY_VIDEO_Tx | SYS_CAPABILITY_AUDIO_Tx; sys_info.capability =SYS_CAPABILITY_AUDIO_Rx | SYS_CAPABILITY_VIDEO_Rx; // sys_info.capability = SYS_CAPABILITY_VIDEO_Tx; sys_info.status = SYS_STATUS_INIT; sys_info.cam.width = 320; sys_info.cam.height = 240; // sys_info.cam.pixel_fmt = V4L2_PIX_FMT_YUV420; sys_info.cam.pixel_fmt = V4L2_PIX_FMT_YUYV; /* alloc RGB565 buffer for frame buffer data store */ RGB565_buffer = (unsigned char *)malloc(sys_info.cam.width * sys_info.cam.height *2); /* step Codec register */ avcodec_register_all(); av_register_all(); video_encoder_init(sys_info.cam.width, sys_info.cam.height, sys_info.cam.pixel_fmt); video_decoder_init(sys_info.cam.width, sys_info.cam.height, sys_info.cam.pixel_fmt); printf("Codec init finish\n"); /* step Frame buffer initial*/ if(FB_init() == 0) { fprintf(stderr, "Frame Buffer init error\n"); } FB_clear(var_info.xres, var_info.yres); sys_set_status(SYS_STATUS_IDLE); /* Create Video thread */ if(sys_info.capability & SYS_CAPABILITY_VIDEO_Rx) pthread_create(&Video_Rx_thread, NULL, Video_Rx_loop, NULL); if(sys_info.capability & SYS_CAPABILITY_VIDEO_Tx) pthread_create(&Video_Tx_thread, NULL, Video_Tx_loop, NULL); /* Create Audio thread*/ if(sys_info.capability & SYS_CAPABILITY_AUDIO_Rx) pthread_create(&Audio_Rx_thread, NULL, Audio_Rx_loop, NULL); if(sys_info.capability & SYS_CAPABILITY_AUDIO_Tx) pthread_create(&Audio_Tx_thread, NULL, Audio_Tx_loop, NULL); /* Signale SIGINT */ signal(SIGINT, SIGINT_release); /* Main loop */ while(sys_get_status() != SYS_STATUS_RELEASE) { /* Button on */ if (is_high(8,11)) { sys_set_status(SYS_STATUS_WORK); pin_high(8, 12); /* LED on*/ } else { // FB_clear(var_info.xres, var_info.yres); // sys_set_status(SYS_STATUS_IDLE); sys_set_status(SYS_STATUS_WORK); pin_low(8, 12); /* LED off */ } //usleep(100000); sleep(1); } pin_low(8, 12); /* LED off */ /* ******************************************************* * Main thread for SIP server communication and HW process * * * *******************************************************/ /* release */ if(sys_info.capability & SYS_CAPABILITY_VIDEO_Tx) pthread_join(Video_Tx_thread,NULL); if(sys_info.capability & SYS_CAPABILITY_VIDEO_Rx) pthread_join(Video_Rx_thread,NULL); if(sys_info.capability & SYS_CAPABILITY_AUDIO_Tx) pthread_join(Audio_Tx_thread,NULL); if(sys_info.capability & SYS_CAPABILITY_AUDIO_Rx) pthread_join(Audio_Rx_thread,NULL); munmap(FB_ptr, FB_scerrn_size); close(FB); free(RGB565_buffer); video_encoder_release(); video_decoder_release(); printf("finish\n"); return 0; }