You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
fftools/ffmpeg_filter: add InputFilter private data
Move InputFilter.frame_queue to it, which is not accessed outside of ffmpeg_filter.
This commit is contained in:
@@ -277,8 +277,6 @@ typedef struct InputFilter {
|
|||||||
uint8_t *name;
|
uint8_t *name;
|
||||||
enum AVMediaType type; // AVMEDIA_TYPE_SUBTITLE for sub2video
|
enum AVMediaType type; // AVMEDIA_TYPE_SUBTITLE for sub2video
|
||||||
|
|
||||||
AVFifo *frame_queue;
|
|
||||||
|
|
||||||
// parameters configured for this input
|
// parameters configured for this input
|
||||||
int format;
|
int format;
|
||||||
|
|
||||||
|
@@ -52,6 +52,17 @@ static FilterGraphPriv *fgp_from_fg(FilterGraph *fg)
|
|||||||
return (FilterGraphPriv*)fg;
|
return (FilterGraphPriv*)fg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct InputFilterPriv {
|
||||||
|
InputFilter ifilter;
|
||||||
|
|
||||||
|
AVFifo *frame_queue;
|
||||||
|
} InputFilterPriv;
|
||||||
|
|
||||||
|
static InputFilterPriv *ifp_from_ifilter(InputFilter *ifilter)
|
||||||
|
{
|
||||||
|
return (InputFilterPriv*)ifilter;
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: YUV420P etc. are actually supported with full color range,
|
// FIXME: YUV420P etc. are actually supported with full color range,
|
||||||
// yet the latter information isn't available here.
|
// yet the latter information isn't available here.
|
||||||
static const enum AVPixelFormat *get_compliance_normal_pix_fmts(const AVCodec *codec, const enum AVPixelFormat default_formats[])
|
static const enum AVPixelFormat *get_compliance_normal_pix_fmts(const AVCodec *codec, const enum AVPixelFormat default_formats[])
|
||||||
@@ -205,14 +216,15 @@ static OutputFilter *ofilter_alloc(FilterGraph *fg)
|
|||||||
|
|
||||||
static InputFilter *ifilter_alloc(FilterGraph *fg)
|
static InputFilter *ifilter_alloc(FilterGraph *fg)
|
||||||
{
|
{
|
||||||
InputFilter *ifilter;
|
InputFilterPriv *ifp = allocate_array_elem(&fg->inputs, sizeof(*ifp),
|
||||||
|
&fg->nb_inputs);
|
||||||
|
InputFilter *ifilter = &ifp->ifilter;
|
||||||
|
|
||||||
ifilter = ALLOC_ARRAY_ELEM(fg->inputs, fg->nb_inputs);
|
|
||||||
ifilter->graph = fg;
|
ifilter->graph = fg;
|
||||||
ifilter->format = -1;
|
ifilter->format = -1;
|
||||||
|
|
||||||
ifilter->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
|
ifp->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
|
||||||
if (!ifilter->frame_queue)
|
if (!ifp->frame_queue)
|
||||||
report_and_exit(AVERROR(ENOMEM));
|
report_and_exit(AVERROR(ENOMEM));
|
||||||
|
|
||||||
return ifilter;
|
return ifilter;
|
||||||
@@ -230,13 +242,14 @@ void fg_free(FilterGraph **pfg)
|
|||||||
avfilter_graph_free(&fg->graph);
|
avfilter_graph_free(&fg->graph);
|
||||||
for (int j = 0; j < fg->nb_inputs; j++) {
|
for (int j = 0; j < fg->nb_inputs; j++) {
|
||||||
InputFilter *ifilter = fg->inputs[j];
|
InputFilter *ifilter = fg->inputs[j];
|
||||||
|
InputFilterPriv *ifp = ifp_from_ifilter(ifilter);
|
||||||
struct InputStream *ist = ifilter->ist;
|
struct InputStream *ist = ifilter->ist;
|
||||||
|
|
||||||
if (ifilter->frame_queue) {
|
if (ifp->frame_queue) {
|
||||||
AVFrame *frame;
|
AVFrame *frame;
|
||||||
while (av_fifo_read(ifilter->frame_queue, &frame, 1) >= 0)
|
while (av_fifo_read(ifp->frame_queue, &frame, 1) >= 0)
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
av_fifo_freep2(&ifilter->frame_queue);
|
av_fifo_freep2(&ifp->frame_queue);
|
||||||
}
|
}
|
||||||
av_freep(&ifilter->displaymatrix);
|
av_freep(&ifilter->displaymatrix);
|
||||||
if (ist->sub2video.sub_queue) {
|
if (ist->sub2video.sub_queue) {
|
||||||
@@ -1302,8 +1315,9 @@ int configure_filtergraph(FilterGraph *fg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < fg->nb_inputs; i++) {
|
for (i = 0; i < fg->nb_inputs; i++) {
|
||||||
|
InputFilterPriv *ifp = ifp_from_ifilter(fg->inputs[i]);
|
||||||
AVFrame *tmp;
|
AVFrame *tmp;
|
||||||
while (av_fifo_read(fg->inputs[i]->frame_queue, &tmp, 1) >= 0) {
|
while (av_fifo_read(ifp->frame_queue, &tmp, 1) >= 0) {
|
||||||
ret = av_buffersrc_add_frame(fg->inputs[i]->filter, tmp);
|
ret = av_buffersrc_add_frame(fg->inputs[i]->filter, tmp);
|
||||||
av_frame_free(&tmp);
|
av_frame_free(&tmp);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@@ -1460,6 +1474,7 @@ int ifilter_send_eof(InputFilter *ifilter, int64_t pts)
|
|||||||
|
|
||||||
int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_reference)
|
int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_reference)
|
||||||
{
|
{
|
||||||
|
InputFilterPriv *ifp = ifp_from_ifilter(ifilter);
|
||||||
FilterGraph *fg = ifilter->graph;
|
FilterGraph *fg = ifilter->graph;
|
||||||
AVFrameSideData *sd;
|
AVFrameSideData *sd;
|
||||||
int need_reinit, ret;
|
int need_reinit, ret;
|
||||||
@@ -1508,7 +1523,7 @@ int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_reference)
|
|||||||
if (!tmp)
|
if (!tmp)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
ret = av_fifo_write(ifilter->frame_queue, &tmp, 1);
|
ret = av_fifo_write(ifp->frame_queue, &tmp, 1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
av_frame_free(&tmp);
|
av_frame_free(&tmp);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user