mirror of https://git.ffmpeg.org/ffmpeg.git
fftools/ffmpeg_filter: pass autorotate/reinit flags through InputFilterOptions
Rather than read them directly from InputStream. This is a step towards avoiding the assumption that filtergraph inputs are always fed by demuxers.
This commit is contained in:
parent
6315f78e0c
commit
fef3052df3
|
@ -250,6 +250,11 @@ typedef struct OptionsContext {
|
||||||
SpecifierOptList mux_stats_fmt;
|
SpecifierOptList mux_stats_fmt;
|
||||||
} OptionsContext;
|
} OptionsContext;
|
||||||
|
|
||||||
|
enum IFilterFlags {
|
||||||
|
IFILTER_FLAG_AUTOROTATE = (1 << 0),
|
||||||
|
IFILTER_FLAG_REINIT = (1 << 1),
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct InputFilterOptions {
|
typedef struct InputFilterOptions {
|
||||||
int64_t trim_start_us;
|
int64_t trim_start_us;
|
||||||
int64_t trim_end_us;
|
int64_t trim_end_us;
|
||||||
|
@ -258,6 +263,9 @@ typedef struct InputFilterOptions {
|
||||||
|
|
||||||
int sub2video_width;
|
int sub2video_width;
|
||||||
int sub2video_height;
|
int sub2video_height;
|
||||||
|
|
||||||
|
// a combination of IFILTER_FLAG_*
|
||||||
|
unsigned flags;
|
||||||
} InputFilterOptions;
|
} InputFilterOptions;
|
||||||
|
|
||||||
typedef struct InputFilter {
|
typedef struct InputFilter {
|
||||||
|
@ -381,8 +389,6 @@ typedef struct InputStream {
|
||||||
*/
|
*/
|
||||||
struct OutputStream **outputs;
|
struct OutputStream **outputs;
|
||||||
int nb_outputs;
|
int nb_outputs;
|
||||||
|
|
||||||
int reinit_filters;
|
|
||||||
} InputStream;
|
} InputStream;
|
||||||
|
|
||||||
typedef struct InputFile {
|
typedef struct InputFile {
|
||||||
|
|
|
@ -63,6 +63,7 @@ typedef struct DemuxStream {
|
||||||
|
|
||||||
int streamcopy_needed;
|
int streamcopy_needed;
|
||||||
int have_sub2video;
|
int have_sub2video;
|
||||||
|
int reinit_filters;
|
||||||
|
|
||||||
int wrap_correction_done;
|
int wrap_correction_done;
|
||||||
int saw_first_ts;
|
int saw_first_ts;
|
||||||
|
@ -1033,6 +1034,9 @@ int ist_filter_add(InputStream *ist, InputFilter *ifilter, int is_simple,
|
||||||
if (!opts->name)
|
if (!opts->name)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
|
opts->flags |= IFILTER_FLAG_AUTOROTATE * !!(ist->autorotate) |
|
||||||
|
IFILTER_FLAG_REINIT * !!(ds->reinit_filters);
|
||||||
|
|
||||||
return ds->sch_idx_dec;
|
return ds->sch_idx_dec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1309,8 +1313,8 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ist->reinit_filters = -1;
|
ds->reinit_filters = -1;
|
||||||
MATCH_PER_STREAM_OPT(reinit_filters, i, ist->reinit_filters, ic, st);
|
MATCH_PER_STREAM_OPT(reinit_filters, i, ds->reinit_filters, ic, st);
|
||||||
|
|
||||||
ist->user_set_discard = AVDISCARD_NONE;
|
ist->user_set_discard = AVDISCARD_NONE;
|
||||||
|
|
||||||
|
|
|
@ -1534,7 +1534,8 @@ static int configure_input_video_filter(FilterGraph *fg, AVFilterGraph *graph,
|
||||||
av_assert0(desc);
|
av_assert0(desc);
|
||||||
|
|
||||||
// TODO: insert hwaccel enabled filters like transpose_vaapi into the graph
|
// TODO: insert hwaccel enabled filters like transpose_vaapi into the graph
|
||||||
if (ist->autorotate && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
|
if ((ifp->opts.flags & IFILTER_FLAG_AUTOROTATE) &&
|
||||||
|
!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
|
||||||
int32_t *displaymatrix = ifp->displaymatrix;
|
int32_t *displaymatrix = ifp->displaymatrix;
|
||||||
double theta;
|
double theta;
|
||||||
|
|
||||||
|
@ -2614,7 +2615,7 @@ static int send_frame(FilterGraph *fg, FilterGraphThread *fgt,
|
||||||
} else if (ifp->displaymatrix_present)
|
} else if (ifp->displaymatrix_present)
|
||||||
need_reinit |= MATRIX_CHANGED;
|
need_reinit |= MATRIX_CHANGED;
|
||||||
|
|
||||||
if (!ifp->ist->reinit_filters && fgt->graph)
|
if (!(ifp->opts.flags & IFILTER_FLAG_REINIT) && fgt->graph)
|
||||||
need_reinit = 0;
|
need_reinit = 0;
|
||||||
|
|
||||||
if (!!ifp->hw_frames_ctx != !!frame->hw_frames_ctx ||
|
if (!!ifp->hw_frames_ctx != !!frame->hw_frames_ctx ||
|
||||||
|
|
Loading…
Reference in New Issue