示例#1
0
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;
}
示例#2
0
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;
}