> From: Eoff, Ullysses A > +static av_cold int rawdump_init(AVFilterContext *avctx) > +{ > + RawDumpContext *ctx = avctx->priv; > + static char *mode = "w";
For the record, this "static" is a problem if multiple rawdump filters are specified in the graph. The initial reason for this was to open the file for writing on the first init (to overwrite any pre-existing file), then open for appending on successive reinit's (e.g. frame resolution changes). Thus, would need a better solution to achieve the same result without influencing other instances of the filter. > + > + ctx->rawdump_file = fopen(ctx->rawdump_file_str, mode); > + > + if (ctx->rawdump_file == NULL) { > + int err = AVERROR(errno); > + char buf[128]; > + av_strerror(err, buf, sizeof(buf)); > + av_log(ctx, AV_LOG_ERROR, "Failed to open %s for dumping: %s\n", > + ctx->rawdump_file_str, buf); > + return err; > + } > + > + av_log(ctx, AV_LOG_DEBUG, "Opened %s (mode:%s) for dumping.\n", > + ctx->rawdump_file_str, mode); > + > + mode = "a"; > + > + return 0; > +} > + > +static av_cold void rawdump_uninit(AVFilterContext *avctx) > +{ > + RawDumpContext *ctx = avctx->priv; > + > + if (ctx->rawdump_file != NULL) > + fclose(ctx->rawdump_file); > +} > + > +#define OFFSET(x) offsetof(RawDumpContext, x) > +#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM > +static const AVOption rawdump_options[] = { > + {"file", "Set file where to dump raw frames", OFFSET(rawdump_file_str), > AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, > + { NULL } > +}; > + > +AVFILTER_DEFINE_CLASS(rawdump); > + > +static const AVFilterPad rawdump_inputs[] = { > + { > + .name = "default", > + .type = AVMEDIA_TYPE_VIDEO, > + .filter_frame = rawdump_filter_frame, > + }, > + { NULL } > +}; > + > +static const AVFilterPad rawdump_outputs[] = { > + { > + .name = "default", > + .type = AVMEDIA_TYPE_VIDEO, > + }, > + { NULL } > +}; > + > +AVFilter ff_vf_rawdump = { > + .name = "rawdump", > + .description = NULL_IF_CONFIG_SMALL("Dump frames to file"), > + .init = rawdump_init, > + .uninit = rawdump_uninit, > + .query_formats = rawdump_query_formats, > + .priv_size = sizeof(RawDumpContext), > + .priv_class = &rawdump_class, > + .inputs = rawdump_inputs, > + .outputs = rawdump_outputs, > +}; > -- > 2.20.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".