int test_store_restore(TestData* testdata){ MotionDetect md; test_bool(initMotionDetect(&md, &testdata->fi, "test") == VS_OK); test_bool(configureMotionDetect(&md)== VS_OK); LocalMotions lms; int i; for(i=0; i<2; i++){ test_bool(motionDetection(&md, &lms,&testdata->frames[i])== VS_OK); if (i==0) vs_vector_del(&lms); } FILE* f = fopen("lmtest","w"); storeLocalmotions(f,&lms); fclose(f); f = fopen("lmtest","r"); LocalMotions test = restoreLocalmotions(f); fclose(f); storeLocalmotions(stderr,&test); compare_localmotions(&lms,&test); fprintf(stderr,"\n** LM and LMS OKAY\n"); f = fopen("lmstest","w"); md.frameNum=1; prepareFile(&md,f); writeToFile(&md,f,&lms); md.frameNum=2; writeToFile(&md,f,&test); fclose(f); f = fopen("lmstest","r"); test_bool(readFileVersion(f)==1); LocalMotions read1; test_bool(readFromFile(f,&read1)==1); compare_localmotions(&lms,&read1); LocalMotions read2; test_bool(readFromFile(f,&read2)==2); compare_localmotions(&test,&read2); fclose(f); fprintf(stderr,"** Reading file stepwise OKAY\n"); vs_vector_del(&read1); vs_vector_del(&read2); vs_vector_del(&test); vs_vector_del(&lms); f = fopen("lmstest","r"); ManyLocalMotions mlms; test_bool(readLocalMotionsFile(f,&mlms)==VS_OK); test_bool(vs_vector_size(&mlms)==2); fprintf(stderr,"** Entire file routine OKAY\n\n"); for(i=0; i< vs_vector_size(&mlms); i++){ if(MLMGet(&mlms,i)) vs_vector_del(MLMGet(&mlms,i)); } vs_vector_del(&mlms); return 1; }
static int config_input(AVFilterLink *inlink) { AVFilterContext *ctx = inlink->dst; FilterData *fd = ctx->priv; FILE* f; // char* filenamecopy, *filebasename; const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[inlink->format]; TransformData* td = &(fd->td); VSFrameInfo fi_src; VSFrameInfo fi_dest; if(!initFrameInfo(&fi_src, inlink->w, inlink->h, AV2OurPixelFormat(ctx,inlink->format)) || !initFrameInfo(&fi_dest, inlink->w, inlink->h, AV2OurPixelFormat(ctx, inlink->format))){ av_log(ctx, AV_LOG_ERROR, "unknown pixel format: %i (%s)", inlink->format, desc->name); return AVERROR(EINVAL); } // check if(fi_src.bytesPerPixel != av_get_bits_per_pixel(desc)/8 || fi_src.log2ChromaW != desc->log2_chroma_w || fi_src.log2ChromaH != desc->log2_chroma_h){ av_log(ctx, AV_LOG_ERROR, "pixel-format error: bpp %i<>%i ", fi_src.bytesPerPixel, av_get_bits_per_pixel(desc)/8); av_log(ctx, AV_LOG_ERROR, "chroma_subsampl: w: %i<>%i h: %i<>%i\n", fi_src.log2ChromaW, desc->log2_chroma_w, fi_src.log2ChromaH, desc->log2_chroma_h); return AVERROR(EINVAL); } if(initTransformData(td, &fi_src, &fi_dest, "transform") != VS_OK){ av_log(ctx, AV_LOG_ERROR, "initialization of TransformData failed\n"); return AVERROR(EINVAL); } td->verbose=1; // TODO: get from somewhere /// TODO: find out input name // fd->input = (char*)av_malloc(VS_INPUT_MAXLEN); // filenamecopy = strndup(fd->vob->video_in_file); // filebasename = basename(filenamecopy); // if (strlen(filebasename) < VS_INPUT_MAXLEN - 4) { // snprintf(fd->result, VS_INPUT_MAXLEN, "%s.trf", filebasename); //} else { // av_log(ctx, AV_LOG_WARN, "input name too long, using default `%s'", // DEFAULT_TRANS_FILE_NAME); snprintf(fd->input, VS_INPUT_MAXLEN, DEFAULT_TRANS_FILE_NAME); // } if (fd->options != NULL) { if(optstr_lookup(fd->options, "help")) { av_log(ctx, AV_LOG_INFO, transform_help); return AVERROR(EINVAL); } optstr_get(fd->options, "input", "%[^:]", fd->input); optstr_get(fd->options, "maxshift", "%d", &td->maxShift); optstr_get(fd->options, "maxangle", "%lf", &td->maxAngle); optstr_get(fd->options, "smoothing", "%d", &td->smoothing); optstr_get(fd->options, "crop" , "%d", &td->crop); optstr_get(fd->options, "invert" , "%d", &td->invert); optstr_get(fd->options, "relative" , "%d", &td->relative); optstr_get(fd->options, "zoom" , "%lf",&td->zoom); optstr_get(fd->options, "optzoom" , "%d", &td->optZoom); optstr_get(fd->options, "interpol" , "%d", (int*)(&td->interpolType)); optstr_get(fd->options, "sharpen" , "%lf",&td->sharpen); if(optstr_lookup(fd->options, "tripod")){ av_log(ctx,AV_LOG_INFO, "Virtual tripod mode: relative=False, smoothing=0"); td->relative=0; td->smoothing=0; } } if(configureTransformData(td)!= VS_OK){ av_log(ctx, AV_LOG_ERROR, "configuration of Tranform failed\n"); return AVERROR(EINVAL); } av_log(ctx, AV_LOG_INFO, "Image Transformation/Stabilization Settings:\n"); av_log(ctx, AV_LOG_INFO, " input = %s\n", fd->input); av_log(ctx, AV_LOG_INFO, " smoothing = %d\n", td->smoothing); av_log(ctx, AV_LOG_INFO, " maxshift = %d\n", td->maxShift); av_log(ctx, AV_LOG_INFO, " maxangle = %f\n", td->maxAngle); av_log(ctx, AV_LOG_INFO, " crop = %s\n", td->crop ? "Black" : "Keep"); av_log(ctx, AV_LOG_INFO, " relative = %s\n", td->relative ? "True": "False"); av_log(ctx, AV_LOG_INFO, " invert = %s\n", td->invert ? "True" : "False"); av_log(ctx, AV_LOG_INFO, " zoom = %f\n", td->zoom); av_log(ctx, AV_LOG_INFO, " optzoom = %s\n", td->optZoom ? "On" : "Off"); av_log(ctx, AV_LOG_INFO, " interpol = %s\n", interpolTypes[td->interpolType]); av_log(ctx, AV_LOG_INFO, " sharpen = %f\n", td->sharpen); f = fopen(fd->input, "r"); if (f == NULL) { av_log(ctx, AV_LOG_ERROR, "cannot open input file %s!\n", fd->input); } else { ManyLocalMotions mlms; if(readLocalMotionsFile(f,&mlms)==VS_OK){ // calculate the actual transforms from the localmotions if(localmotions2TransformsSimple(td, &mlms,&fd->trans)!=VS_OK) av_log(ctx, AV_LOG_ERROR, "calculating transformations failed!\n"); }else{ // try to read old format if (!readOldTransforms(td, f, &fd->trans)) { /* read input file */ av_log(ctx, AV_LOG_ERROR, "error parsing input file %s!\n", fd->input); } } } fclose(f); if (preprocessTransforms(td, &fd->trans)!= VS_OK ) { av_log(ctx, AV_LOG_ERROR, "error while preprocessing transforms\n"); return AVERROR(EINVAL); } // TODO: add sharpening return 0; }