void start_recording(GtkWidget *widget, gpointer data) { GdkNativeWindow native; GdkDisplay *display; GdkRectangle rect; if(is_recording) return; screen = gtk_widget_get_screen(widget); if (screen == NULL) { screen = gdk_screen_get_default (); } native = select_window(screen); display = gdk_screen_get_display (screen); window = gdk_window_foreign_new_for_display (display, native); gdk_drawable_get_size (GDK_DRAWABLE (window), &rect.width, &rect.height); /* creating flv und screenVideo instances */ flv = newFLVStream(FLVVERSION_1, FLVFLAG_VIDEO); video = newScreenVideo(rect.width, rect.height, 64); printf("video width: %i, height: %i\n", rect.width, rect.height); /* capture timer */ g_timeout_add ( 1000 / FRAMERATE, next_capture, NULL); is_recording = 1; }
static void enc_init(MSFilter *f){ EncData *d=ms_new(EncData,1); d->enc=NULL; d->keyframe_int=10; /*10 seconds */ d->mode=0; d->framenum=0; d->generate_keyframe=FALSE; d->packer=NULL; d->vconf_list = &x264_conf_list[0]; d->vconf = ms_video_find_best_configuration_for_bitrate(d->vconf_list, 384000); d->flv = newFLVStream(2*1024*1024); d->enc = ms_new0(struct x264_encode,1); f->data=d; if(vpu_Init(NULL)!=0) { ms_error("MSH264Enc: VPU Init error\n"); return ; } d->mem_desc.size = STREAM_BUF_SIZE; if(IOGetPhyMem(&d->mem_desc)!=0) { ms_error("MSH264Enc: Unable to obtain physical memory\n"); return ; } /* mmap that physical buffer */ d->enc->virt_bsbuf_addr = IOGetVirtMem(&d->mem_desc); if (d->enc->virt_bsbuf_addr <= 0) { IOFreePhyMem(&d->mem_desc); ms_error("MSH264Enc: Unable to map physical memory\n"); return ; } d->enc->phy_bsbuf_addr = d->mem_desc.phy_addr; }