コード例 #1
0
int sj_index_search(SJ_IndexContext *sj_ic, uint64_t search_time, Index *idx, Index *key_frame, uint64_t mode)
{
    if (mode != SJ_INDEX_TIMECODE_SEARCH && mode != SJ_INDEX_PTS_SEARCH && mode != SJ_INDEX_DTS_SEARCH) {
        return -4;  // invalid flag value
    }
    int pos;
    if (mode != SJ_INDEX_DTS_SEARCH) {
        pos = search_frame(sj_ic, idx, search_time, mode);
    } else {
        pos = search_frame_dts(sj_ic, idx, search_time);
    }
    if (idx->pic_type != FF_I_TYPE && pos >= 0) {
        find_I_frame(key_frame, *sj_ic, pos);
    }
    return pos; // pos = -1 if frame wasn't found
}
コード例 #2
0
ファイル: frame.c プロジェクト: richq/w3m
union frameset_element *
search_frame(struct frameset *fset, char *name)
{
    int i;
    union frameset_element *e = NULL;

    for (i = 0; i < fset->col * fset->row; i++) {
	e = &(fset->frame[i]);
	if (e->element != NULL) {
	    if (e->element->name && !strcmp(e->element->name, name)) {
		return e;
	    }
	    else if (e->element->attr == F_FRAMESET &&
		     (e = search_frame(e->set, name))) {
		return e;
	    }
	}
    }
    return NULL;
}
コード例 #3
0
/*
 *			M A I N
 */
int
main(int argc, char **argv)
{
    register FBIO	*fbp = FBIO_NULL;
    int scene_number = 1;
    int start_frame = 1;
    int number_of_frames=0;
    int number_of_images=0;
    int start_seq_number=0;
    int	exit_code;

    exit_code = 0;

    bu_log(""
	   "*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***\n"
	   "\n"
	   "This tool is deprecated and under consideration for removal from\n"
	   "BRL-CAD.  If you use this tool, please contact the developers via\n"
	   "[email protected] to express your interest and justification for not\n"
	   "removing this tool.  Otherwise, this tool will likely be removed from\n"
	   "a future release of BRL-CAD.\n"
	   "\n"
	   "*** WARNING *** WARNING *** WARNING *** WARNING *** WARNING ***\n"
	   "\n");

    if ( !get_args( argc, argv ) )  {
	usage();
	bu_exit( 1, NULL );
    }

    argc -= (bu_optind-1);
    argv += (bu_optind-1);

    /*
     *  First group of commands.
     *  No checking of VAS IV status is performed first.
     */
    if (strcmp(argv[1], "init") == 0) {
	vas_open();
	if ( get_vas_status() < 0 )
	    bu_exit(1, NULL);
	vas_putc(C_INIT);
	vas_await(R_INIT, 5);
	if ( get_vtr_status(0) < 0 )
	    exit_code = 1;
	goto done;
    }
    else if (strcmp(argv[1], "status") == 0) {
	vas_open();
	(void)get_vas_status();
	(void)get_vtr_status(1);
	get_tape_position();
	(void)get_frame_code();
	goto done;
    }
    else if (strcmp(argv[1], "sequence") == 0) {
	if (argc == 2) {
	    number_of_images = 1;
	    number_of_frames = 1;
	    start_seq_number = 1;
	}
	else if (argc == 4) {
	    number_of_images = atoi(argv[2]);
	    if (number_of_images < 1)
		usage_seq();
	    number_of_frames = str2frames(argv[3]);
	    if (number_of_frames < 1)
		usage_seq();
	    start_seq_number = 1;
	}
	else if (argc == 5) {
	    number_of_images = atoi(argv[2]);
	    if (number_of_images < 1)
		usage_seq();
	    number_of_frames = str2frames(argv[3]);
	    if (number_of_frames < 1)
		usage_seq();
	    start_seq_number = atoi(argv[4]);
	}
	else
	    usage_seq();


	record_seq(number_of_images, number_of_frames, start_seq_number);
	goto done;
    }

    /*
     *  Second group of commands.
     *  VAS IV is opened, and status of VAS is checked first
     *  but VTR is not queried.
     */
    vas_open();
    if ( get_vas_status() < 0 )
	bu_exit(1, NULL);

    if (strcmp(argv[1], "rewind") == 0) {
	vas_putc(C_REWIND);
	goto done;
    }
    else if (strcmp(argv[1], "play") == 0) {
	vas_putc(C_PLAY);
	goto done;
    }
    else if (strcmp(argv[1], "stop") == 0) {
	vas_putc(C_STOP);
	goto done;
    }
    else if (strcmp(argv[1], "fforward") == 0) {
	vas_putc(C_FFORWARD);
	goto done;
    }

    /*
     *  Third group of commands.
     *  VAS IV is opened and checked above,
     *  and VTR status is checked here.
     */
    if ( get_vtr_status(0) < 0 )  {
	exit_code = 1;
	goto done;
    }
    if ( strcmp(argv[1], "search") == 0 )  {
	if ( argc >= 3 )
	    start_frame = str2frames(argv[2]);
	else
	    start_frame = 1;
	exit_code = search_frame(start_frame);
	goto done;
    }
    else if ( strcmp(argv[1], "time0") == 0 )  {
	exit_code = time0();
	goto done;
    }
    else if ( strcmp( argv[1], "reset_time" ) == 0 )  {
	exit_code = reset_tape_time();
	goto done;
    }

    /*
     *  If this is running on a workstation, and a window has to be
     *  opened to cause image to be re-displayed, do so now.
     */
    if ( framebuffer != (char *)0 )  {
	if ( (fbp = fb_open( framebuffer, scr_width, scr_height )) == FBIO_NULL )  {
	    exit_code = 12;
	    goto done;
	}
    }

    /*
     *  Commands that will actually record some image onto tape
     */
    if (strcmp(argv[1], "new") == 0) {
	if ( argc >= 4 )  {
	    if ( (start_frame = str2frames(argv[3])) < 1 )
		usage_new();
	}
	if (argc >= 3) {
	    if ( (scene_number = atoi(argv[2])) < 1 )
		usage_new();
	}
	else if (argc == 2) {
	    scene_number = 1;
	}
	else {
	    usage_new();
	}
	program_recording(1, scene_number, start_frame);
	goto done;
    }
    else if (strcmp(argv[1], "old") == 0) {
	if ( argc >= 4 )  {
	    if ( (start_frame = str2frames(argv[3])) < 1 )
		usage_new();
	}
	if (argc >= 3) {
	    if ( (scene_number = atoi(argv[2])) < 1 )
		usage_new();
	}
	else if (argc == 2) {
	    scene_number = 1;
	}
	else {
	    usage_new();
	}
	/* May need one more parameter here, eventually */
	program_recording(0, scene_number, start_frame);
	goto done;
    }
    else if (strcmp(argv[1], "record") == 0) {
	if (argc == 3) {
	    number_of_frames = str2frames(argv[2]);
	    if (number_of_frames < 1) {
		usage_record();
	    }
	}
	else if (argc == 2) {
	    number_of_frames = 1;
	}
	else {
	    usage_record();
	}
	record_add_to_scene(number_of_frames);
	goto done;
    } else {
	/* None of the above */
	usage();
	exit_code = 1;
    }

 done:
    vas_close();
    if (fbp) fb_close(fbp);
    bu_exit(exit_code, NULL);
}