VideoFilter * newConvertFilter (VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width, int *height, char *options) { ThisFilter *filter; (void) options; if ((inpixfmt != FMT_YUV422P || outpixfmt != FMT_YV12) && (inpixfmt != FMT_YV12 || outpixfmt != FMT_YUV422P) && (inpixfmt != outpixfmt)) return NULL; filter = malloc (sizeof (ThisFilter)); if (filter == NULL) { fprintf (stderr, "Convert: failed to allocate memory for filter\n"); return NULL; } if (inpixfmt == FMT_YV12 && outpixfmt == FMT_YUV422P) { filter->vf.filter = &Cvt420422; filter->uoff = *width * *height; filter->cwidth = *width / 2; filter->cheight = *height / 2; filter->icsize = *width * *height / 4; filter->ocsize = *width * *height / 2; filter->osize = *width * *height * 2; } else if (inpixfmt == FMT_YUV422P && outpixfmt == FMT_YV12) { filter->vf.filter = &Cvt422420; filter->uoff = *width * *height; filter->cwidth = *width / 2; filter->cheight = *height / 2; filter->icsize = *width * *height / 2; filter->ocsize = *width * *height / 4; filter->osize = *width * *height * 3 / 2; } else if (inpixfmt == outpixfmt) filter->vf.filter = NULL; filter->vf.cleanup = NULL; TF_INIT(filter); return (VideoFilter *) filter; }
static VideoFilter* GreedyHDeintFilter(VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width, int *height, char *options, int threads) { ThisFilter *filter; (void) height; (void) options; (void) threads; filter = (ThisFilter *) malloc (sizeof(ThisFilter)); if (filter == NULL) { fprintf (stderr, "GreedyHDeint: failed to allocate memory for filter.\n"); return NULL; } filter->width = 0; filter->height = 0; memset(filter->frames, 0, sizeof(filter->frames)); filter->deint_frame = 0; AllocFilter(filter, *width, *height); init_yuv_conversion(); #ifdef MMX filter->mm_flags = av_get_cpu_flags(); TF_INIT(filter); #else filter->mm_flags = 0; #endif if (!(filter->mm_flags & (AV_CPU_FLAG_SSE|AV_CPU_FLAG_3DNOW|AV_CPU_FLAG_MMX))) { /* TODO plain old C implementation */ fprintf (stderr, "GreedyHDeint: Requires MMX extensions.\n"); CleanupGreedyHDeintFilter(&filter->vf); free(filter); return NULL; } filter->vf.filter = &GreedyHDeint; filter->vf.cleanup = &CleanupGreedyHDeintFilter; return (VideoFilter *) filter; }
static VideoFilter *new_filter(VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width, int *height, char *options, int threads) { (void) threads; ThisFilter *filter; if ( inpixfmt != FMT_YV12 || outpixfmt != FMT_YV12 ) return NULL; filter = (ThisFilter*) malloc(sizeof(ThisFilter)); if (filter == NULL) { fprintf(stderr,"Couldn't allocate memory for filter\n"); return NULL; } filter->context = pp_get_context(*width, *height, PP_CPU_CAPS_MMX|PP_CPU_CAPS_MMX2|PP_CPU_CAPS_3DNOW); if (filter->context == NULL) { fprintf(stderr,"PostProc: failed to get PP context\n"); free(filter); return NULL; } printf("Filteroptions: %s\n", options); filter->mode = pp_get_mode_by_name_and_quality(options, PP_QUALITY_MAX); if (filter->mode == NULL) { printf("%s", pp_help); free(filter); return NULL; } filter->eprint = 0; filter->vf.filter = &pp; filter->vf.cleanup = &cleanup; TF_INIT(filter); return (VideoFilter *)filter; }
static VideoFilter* GreedyHDeintFilter(VideoFrameType inpixfmt, VideoFrameType outpixfmt, int *width, int *height, char *options, int threads) { ThisFilter *filter; (void) height; (void) options; (void) threads; filter = (ThisFilter *) malloc (sizeof(ThisFilter)); if (filter == NULL) { fprintf (stderr, "GreedyHDeint: failed to allocate memory for filter.\n"); return NULL; } filter->width = 0; filter->height = 0; memset(filter->frames, 0, sizeof(filter->frames)); filter->deint_frame = 0; AllocFilter(filter, *width, *height); init_yuv_conversion(); #ifdef MMX filter->mm_flags = av_get_cpu_flags(); TF_INIT(filter); #else filter->mm_flags = 0; #endif filter->vf.filter = &GreedyHDeint; filter->vf.cleanup = &CleanupGreedyHDeintFilter; return (VideoFilter *) filter; }