fftools/ffmpeg_filter: return error codes from choose_pix_fmts() instead of aborting
This commit is contained in:
parent
8815adfe75
commit
8db96808bc
@ -270,20 +270,20 @@ static void sub2video_update(InputFilterPriv *ifp, int64_t heartbeat_pts,
|
|||||||
ifp->sub2video.initialize = 0;
|
ifp->sub2video.initialize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* May return NULL (no pixel format found), a static string or a string
|
/* *dst may return be set to NULL (no pixel format found), a static string or a
|
||||||
* backed by the bprint. Nothing has been written to the AVBPrint in case
|
* string backed by the bprint. Nothing has been written to the AVBPrint in case
|
||||||
* NULL is returned. The AVBPrint provided should be clean. */
|
* NULL is returned. The AVBPrint provided should be clean. */
|
||||||
static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
|
static int choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint,
|
||||||
|
const char **dst)
|
||||||
{
|
{
|
||||||
OutputFilterPriv *ofp = ofp_from_ofilter(ofilter);
|
OutputFilterPriv *ofp = ofp_from_ofilter(ofilter);
|
||||||
OutputStream *ost = ofilter->ost;
|
OutputStream *ost = ofilter->ost;
|
||||||
|
|
||||||
if (ost->keep_pix_fmt) {
|
*dst = NULL;
|
||||||
return ofp->format == AV_PIX_FMT_NONE ? NULL :
|
|
||||||
|
if (ost->keep_pix_fmt || ofp->format != AV_PIX_FMT_NONE) {
|
||||||
|
*dst = ofp->format == AV_PIX_FMT_NONE ? NULL :
|
||||||
av_get_pix_fmt_name(ofp->format);
|
av_get_pix_fmt_name(ofp->format);
|
||||||
}
|
|
||||||
if (ofp->format != AV_PIX_FMT_NONE) {
|
|
||||||
return av_get_pix_fmt_name(ofp->format);
|
|
||||||
} else if (ofp->formats) {
|
} else if (ofp->formats) {
|
||||||
const enum AVPixelFormat *p = ofp->formats;
|
const enum AVPixelFormat *p = ofp->formats;
|
||||||
|
|
||||||
@ -292,10 +292,12 @@ static const char *choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint)
|
|||||||
av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|');
|
av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|');
|
||||||
}
|
}
|
||||||
if (!av_bprint_is_complete(bprint))
|
if (!av_bprint_is_complete(bprint))
|
||||||
report_and_exit(AVERROR(ENOMEM));
|
return AVERROR(ENOMEM);
|
||||||
return bprint->str;
|
|
||||||
} else
|
*dst = bprint->str;
|
||||||
return NULL;
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Define a function for appending a list of allowed formats
|
/* Define a function for appending a list of allowed formats
|
||||||
@ -1103,7 +1105,11 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
|
|||||||
}
|
}
|
||||||
|
|
||||||
av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED);
|
av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED);
|
||||||
if ((pix_fmts = choose_pix_fmts(ofilter, &bprint))) {
|
ret = choose_pix_fmts(ofilter, &bprint, &pix_fmts);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (pix_fmts) {
|
||||||
AVFilterContext *filter;
|
AVFilterContext *filter;
|
||||||
|
|
||||||
ret = avfilter_graph_create_filter(&filter,
|
ret = avfilter_graph_create_filter(&filter,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user