mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavfi: remove request/poll and drawing functions from public API on next bump
They are only useful inside filters and we don't allow user filters for now.
This commit is contained in:
parent
fa417fcd27
commit
803391f719
@ -349,7 +349,7 @@ static int request_samples(AVFilterContext *ctx, int min_samples)
|
||||
if (s->input_state[i] == INPUT_OFF)
|
||||
continue;
|
||||
while (!ret && av_audio_fifo_size(s->fifos[i]) < min_samples)
|
||||
ret = avfilter_request_frame(ctx->inputs[i]);
|
||||
ret = ff_request_frame(ctx->inputs[i]);
|
||||
if (ret == AVERROR_EOF) {
|
||||
if (av_audio_fifo_size(s->fifos[i]) == 0) {
|
||||
s->input_state[i] = INPUT_OFF;
|
||||
@ -410,7 +410,7 @@ static int request_frame(AVFilterLink *outlink)
|
||||
}
|
||||
|
||||
if (s->frame_list->nb_frames == 0) {
|
||||
ret = avfilter_request_frame(ctx->inputs[0]);
|
||||
ret = ff_request_frame(ctx->inputs[0]);
|
||||
if (ret == AVERROR_EOF) {
|
||||
s->input_state[0] = INPUT_OFF;
|
||||
if (s->nb_inputs == 1)
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include "audio.h"
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
|
||||
typedef struct ASyncContext {
|
||||
const AVClass *class;
|
||||
@ -116,7 +117,7 @@ static int request_frame(AVFilterLink *link)
|
||||
{
|
||||
AVFilterContext *ctx = link->src;
|
||||
ASyncContext *s = ctx->priv;
|
||||
int ret = avfilter_request_frame(ctx->inputs[0]);
|
||||
int ret = ff_request_frame(ctx->inputs[0]);
|
||||
int nb_samples;
|
||||
|
||||
/* flush the fifo */
|
||||
|
@ -130,7 +130,7 @@ static int request_frame(AVFilterLink *outlink)
|
||||
{
|
||||
AVFilterContext *ctx = outlink->src;
|
||||
ResampleContext *s = ctx->priv;
|
||||
int ret = avfilter_request_frame(ctx->inputs[0]);
|
||||
int ret = ff_request_frame(ctx->inputs[0]);
|
||||
|
||||
/* flush the lavr delay buffer */
|
||||
if (ret == AVERROR_EOF && s->avr) {
|
||||
|
@ -223,18 +223,18 @@ void ff_dlog_link(void *ctx, AVFilterLink *link, int end)
|
||||
}
|
||||
}
|
||||
|
||||
int avfilter_request_frame(AVFilterLink *link)
|
||||
int ff_request_frame(AVFilterLink *link)
|
||||
{
|
||||
FF_DPRINTF_START(NULL, request_frame); ff_dlog_link(NULL, link, 1);
|
||||
|
||||
if (link->srcpad->request_frame)
|
||||
return link->srcpad->request_frame(link);
|
||||
else if (link->src->inputs[0])
|
||||
return avfilter_request_frame(link->src->inputs[0]);
|
||||
return ff_request_frame(link->src->inputs[0]);
|
||||
else return -1;
|
||||
}
|
||||
|
||||
int avfilter_poll_frame(AVFilterLink *link)
|
||||
int ff_poll_frame(AVFilterLink *link)
|
||||
{
|
||||
int i, min = INT_MAX;
|
||||
|
||||
@ -245,7 +245,7 @@ int avfilter_poll_frame(AVFilterLink *link)
|
||||
int val;
|
||||
if (!link->src->inputs[i])
|
||||
return -1;
|
||||
val = avfilter_poll_frame(link->src->inputs[i]);
|
||||
val = ff_poll_frame(link->src->inputs[i]);
|
||||
min = FFMIN(min, val);
|
||||
}
|
||||
|
||||
@ -444,4 +444,12 @@ void avfilter_insert_outpad(AVFilterContext *f, unsigned index,
|
||||
ff_insert_pad(index, &f->output_count, offsetof(AVFilterLink, srcpad),
|
||||
&f->output_pads, &f->outputs, p);
|
||||
}
|
||||
int avfilter_poll_frame(AVFilterLink *link)
|
||||
{
|
||||
return ff_poll_frame(link);
|
||||
}
|
||||
int avfilter_request_frame(AVFilterLink *link)
|
||||
{
|
||||
return ff_request_frame(link);
|
||||
}
|
||||
#endif
|
||||
|
@ -620,57 +620,20 @@ AVFilterBufferRef *avfilter_get_audio_buffer_ref_from_arrays(uint8_t **data,
|
||||
enum AVSampleFormat sample_fmt,
|
||||
uint64_t channel_layout);
|
||||
|
||||
/**
|
||||
* Request an input frame from the filter at the other end of the link.
|
||||
*
|
||||
* @param link the input link
|
||||
* @return zero on success
|
||||
*/
|
||||
#if FF_API_FILTERS_PUBLIC
|
||||
attribute_deprecated
|
||||
int avfilter_request_frame(AVFilterLink *link);
|
||||
|
||||
/**
|
||||
* Poll a frame from the filter chain.
|
||||
*
|
||||
* @param link the input link
|
||||
* @return the number of immediately available frames, a negative
|
||||
* number in case of error
|
||||
*/
|
||||
attribute_deprecated
|
||||
int avfilter_poll_frame(AVFilterLink *link);
|
||||
|
||||
/**
|
||||
* Notify the next filter of the start of a frame.
|
||||
*
|
||||
* @param link the output link the frame will be sent over
|
||||
* @param picref A reference to the frame about to be sent. The data for this
|
||||
* frame need only be valid once draw_slice() is called for that
|
||||
* portion. The receiving filter will free this reference when
|
||||
* it no longer needs it.
|
||||
*/
|
||||
attribute_deprecated
|
||||
void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
|
||||
|
||||
/**
|
||||
* Notifie the next filter that the current frame has finished.
|
||||
*
|
||||
* @param link the output link the frame was sent over
|
||||
*/
|
||||
attribute_deprecated
|
||||
void avfilter_end_frame(AVFilterLink *link);
|
||||
|
||||
/**
|
||||
* Send a slice to the next filter.
|
||||
*
|
||||
* Slices have to be provided in sequential order, either in
|
||||
* top-bottom or bottom-top order. If slices are provided in
|
||||
* non-sequential order the behavior of the function is undefined.
|
||||
*
|
||||
* @param link the output link over which the frame is being sent
|
||||
* @param y offset in pixels from the top of the image for this slice
|
||||
* @param h height of this slice in pixels
|
||||
* @param slice_dir the assumed direction for sending slices,
|
||||
* from the top slice to the bottom slice if the value is 1,
|
||||
* from the bottom slice to the top slice if the value is -1,
|
||||
* for other values the behavior of the function is undefined.
|
||||
*/
|
||||
attribute_deprecated
|
||||
void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
|
||||
#endif
|
||||
|
||||
/** Initialize the filter system. Register all builtin filters. */
|
||||
void avfilter_register_all(void);
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "audio.h"
|
||||
#include "avfilter.h"
|
||||
#include "buffersink.h"
|
||||
#include "internal.h"
|
||||
|
||||
typedef struct {
|
||||
AVFifoBuffer *fifo; ///< FIFO buffer of frame references
|
||||
@ -102,11 +103,11 @@ int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf)
|
||||
if (av_fifo_size(sink->fifo))
|
||||
return av_fifo_size(sink->fifo)/sizeof(*buf);
|
||||
else
|
||||
return avfilter_poll_frame(ctx->inputs[0]);
|
||||
return ff_poll_frame(ctx->inputs[0]);
|
||||
}
|
||||
|
||||
if (!av_fifo_size(sink->fifo) &&
|
||||
(ret = avfilter_request_frame(link)) < 0)
|
||||
(ret = ff_request_frame(link)) < 0)
|
||||
return ret;
|
||||
|
||||
if (!av_fifo_size(sink->fifo))
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "avfilter.h"
|
||||
#include "buffersrc.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
#include "vsrc_buffer.h"
|
||||
|
||||
#include "libavutil/audioconvert.h"
|
||||
@ -340,9 +341,9 @@ static int request_frame(AVFilterLink *link)
|
||||
|
||||
switch (link->type) {
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
avfilter_start_frame(link, avfilter_ref_buffer(buf, ~0));
|
||||
avfilter_draw_slice(link, 0, link->h, 1);
|
||||
avfilter_end_frame(link);
|
||||
ff_start_frame(link, avfilter_ref_buffer(buf, ~0));
|
||||
ff_draw_slice(link, 0, link->h, 1);
|
||||
ff_end_frame(link);
|
||||
break;
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
ff_filter_samples(link, avfilter_ref_buffer(buf, ~0));
|
||||
|
@ -69,4 +69,21 @@ static inline void ff_insert_outpad(AVFilterContext *f, unsigned index,
|
||||
&f->output_pads, &f->outputs, p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Poll a frame from the filter chain.
|
||||
*
|
||||
* @param link the input link
|
||||
* @return the number of immediately available frames, a negative
|
||||
* number in case of error
|
||||
*/
|
||||
int ff_poll_frame(AVFilterLink *link);
|
||||
|
||||
/**
|
||||
* Request an input frame from the filter at the other end of the link.
|
||||
*
|
||||
* @param link the input link
|
||||
* @return zero on success
|
||||
*/
|
||||
int ff_request_frame(AVFilterLink *link);
|
||||
|
||||
#endif /* AVFILTER_INTERNAL_H */
|
||||
|
@ -69,8 +69,8 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ctx->output_count; i++)
|
||||
avfilter_start_frame(ctx->outputs[i],
|
||||
avfilter_ref_buffer(picref, ~AV_PERM_WRITE));
|
||||
ff_start_frame(ctx->outputs[i],
|
||||
avfilter_ref_buffer(picref, ~AV_PERM_WRITE));
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
@ -79,7 +79,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ctx->output_count; i++)
|
||||
avfilter_draw_slice(ctx->outputs[i], y, h, slice_dir);
|
||||
ff_draw_slice(ctx->outputs[i], y, h, slice_dir);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
@ -88,7 +88,7 @@ static void end_frame(AVFilterLink *inlink)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ctx->output_count; i++)
|
||||
avfilter_end_frame(ctx->outputs[i]);
|
||||
ff_end_frame(ctx->outputs[i]);
|
||||
|
||||
avfilter_unref_buffer(inlink->cur_buf);
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
AspectContext *aspect = link->dst->priv;
|
||||
|
||||
picref->video->pixel_aspect = aspect->aspect;
|
||||
avfilter_start_frame(link->dst->outputs[0], picref);
|
||||
ff_start_frame(link->dst->outputs[0], picref);
|
||||
}
|
||||
|
||||
#if CONFIG_SETDAR_FILTER
|
||||
|
@ -87,7 +87,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
p += picref->linesize[0];
|
||||
}
|
||||
|
||||
avfilter_draw_slice(ctx->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(ctx->outputs[0], y, h, slice_dir);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
@ -105,7 +105,7 @@ static void end_frame(AVFilterLink *inlink)
|
||||
|
||||
blackframe->frame++;
|
||||
blackframe->nblack = 0;
|
||||
avfilter_end_frame(inlink->dst->outputs[0]);
|
||||
ff_end_frame(inlink->dst->outputs[0]);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_blackframe = {
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
|
||||
static const char *const var_names[] = {
|
||||
"w",
|
||||
@ -328,7 +329,7 @@ static void draw_slice(AVFilterLink *inlink, int y0, int h0, int slice_dir)
|
||||
w[plane], h[plane], boxblur->radius[plane], boxblur->power[plane],
|
||||
boxblur->temp);
|
||||
|
||||
avfilter_draw_slice(outlink, y0, h0, slice_dir);
|
||||
ff_draw_slice(outlink, y0, h0, slice_dir);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_boxblur = {
|
||||
|
@ -290,7 +290,7 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
ref2->data[3] += crop->x * crop->max_step[3];
|
||||
}
|
||||
|
||||
avfilter_start_frame(link->dst->outputs[0], ref2);
|
||||
ff_start_frame(link->dst->outputs[0], ref2);
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
@ -308,7 +308,7 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
if (y + h > crop->y + crop->h)
|
||||
h = crop->y + crop->h - y;
|
||||
|
||||
avfilter_draw_slice(ctx->outputs[0], y - crop->y, h, slice_dir);
|
||||
ff_draw_slice(ctx->outputs[0], y - crop->y, h, slice_dir);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *link)
|
||||
@ -317,7 +317,7 @@ static void end_frame(AVFilterLink *link)
|
||||
|
||||
crop->var_values[VAR_N] += 1.0;
|
||||
avfilter_unref_buffer(link->cur_buf);
|
||||
avfilter_end_frame(link->dst->outputs[0]);
|
||||
ff_end_frame(link->dst->outputs[0]);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_crop = {
|
||||
|
@ -190,7 +190,7 @@ static void end_frame(AVFilterLink *inlink)
|
||||
w, h, x, y);
|
||||
}
|
||||
|
||||
avfilter_end_frame(inlink->dst->outputs[0]);
|
||||
ff_end_frame(inlink->dst->outputs[0]);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_cropdetect = {
|
||||
|
@ -228,7 +228,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
outpicref = inpicref;
|
||||
|
||||
outlink->out_buf = outpicref;
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
}
|
||||
|
||||
static void null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { }
|
||||
@ -257,8 +257,8 @@ static void end_frame(AVFilterLink *inlink)
|
||||
delogo->show, direct);
|
||||
}
|
||||
|
||||
avfilter_draw_slice(outlink, 0, inlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, inlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(inpicref);
|
||||
if (!direct)
|
||||
avfilter_unref_buffer(outpicref);
|
||||
|
@ -119,7 +119,7 @@ static void draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir)
|
||||
}
|
||||
}
|
||||
|
||||
avfilter_draw_slice(inlink->dst->outputs[0], y0, h, 1);
|
||||
ff_draw_slice(inlink->dst->outputs[0], y0, h, 1);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_drawbox = {
|
||||
|
@ -849,7 +849,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
(int)dtext->var_values[VAR_N], dtext->var_values[VAR_T],
|
||||
dtext->x, dtext->y, dtext->x+dtext->w, dtext->y+dtext->h);
|
||||
|
||||
avfilter_start_frame(inlink->dst->outputs[0], inpicref);
|
||||
ff_start_frame(inlink->dst->outputs[0], inpicref);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
@ -863,8 +863,8 @@ static void end_frame(AVFilterLink *inlink)
|
||||
|
||||
dtext->var_values[VAR_N] += 1.0;
|
||||
|
||||
avfilter_draw_slice(outlink, 0, picref->video->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, picref->video->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_drawtext = {
|
||||
|
@ -133,14 +133,14 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
}
|
||||
}
|
||||
|
||||
avfilter_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
{
|
||||
FadeContext *fade = inlink->dst->priv;
|
||||
|
||||
avfilter_end_frame(inlink->dst->outputs[0]);
|
||||
ff_end_frame(inlink->dst->outputs[0]);
|
||||
|
||||
if (fade->frame_index >= fade->start_frame &&
|
||||
fade->frame_index <= fade->stop_frame)
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -124,7 +125,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
outpicref = avfilter_ref_buffer(inpicref, ~0);
|
||||
outlink->out_buf = outpicref;
|
||||
|
||||
avfilter_start_frame(outlink, outpicref);
|
||||
ff_start_frame(outlink, outpicref);
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
@ -141,7 +142,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
* and that complexity will be added later */
|
||||
if ( !inpicref->video->interlaced
|
||||
|| inpicref->video->top_field_first == fieldorder->dst_tff) {
|
||||
avfilter_draw_slice(outlink, y, h, slice_dir);
|
||||
ff_draw_slice(outlink, y, h, slice_dir);
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,13 +204,13 @@ static void end_frame(AVFilterLink *inlink)
|
||||
}
|
||||
}
|
||||
outpicref->video->top_field_first = fieldorder->dst_tff;
|
||||
avfilter_draw_slice(outlink, 0, h, 1);
|
||||
ff_draw_slice(outlink, 0, h, 1);
|
||||
} else {
|
||||
av_dlog(ctx,
|
||||
"not interlaced or field order already correct\n");
|
||||
}
|
||||
|
||||
avfilter_end_frame(outlink);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(inpicref);
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
*/
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct BufPic {
|
||||
@ -77,15 +78,15 @@ static int request_frame(AVFilterLink *outlink)
|
||||
int ret;
|
||||
|
||||
if (!fifo->root.next) {
|
||||
if ((ret = avfilter_request_frame(outlink->src->inputs[0]) < 0))
|
||||
if ((ret = ff_request_frame(outlink->src->inputs[0]) < 0))
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* by doing this, we give ownership of the reference to the next filter,
|
||||
* so we don't have to worry about dereferencing it ourselves. */
|
||||
avfilter_start_frame(outlink, fifo->root.next->picref);
|
||||
avfilter_draw_slice (outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame (outlink);
|
||||
ff_start_frame(outlink, fifo->root.next->picref);
|
||||
ff_draw_slice (outlink, 0, outlink->h, 1);
|
||||
ff_end_frame (outlink);
|
||||
|
||||
if (fifo->last == fifo->root.next)
|
||||
fifo->last = &fifo->root;
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include "libavutil/parseutils.h"
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct FPSContext {
|
||||
const AVClass *class;
|
||||
@ -129,7 +131,7 @@ static int request_frame(AVFilterLink *outlink)
|
||||
int ret = 0;
|
||||
|
||||
while (ret >= 0 && s->frames_out == frames_out)
|
||||
ret = avfilter_request_frame(ctx->inputs[0]);
|
||||
ret = ff_request_frame(ctx->inputs[0]);
|
||||
|
||||
/* flush the fifo */
|
||||
if (ret == AVERROR_EOF && av_fifo_size(s->fifo)) {
|
||||
@ -141,9 +143,9 @@ static int request_frame(AVFilterLink *outlink)
|
||||
buf->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base,
|
||||
outlink->time_base) + s->frames_out;
|
||||
|
||||
avfilter_start_frame(outlink, buf);
|
||||
avfilter_draw_slice(outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_start_frame(outlink, buf);
|
||||
ff_draw_slice(outlink, 0, outlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
s->frames_out++;
|
||||
}
|
||||
return 0;
|
||||
@ -229,9 +231,9 @@ static void end_frame(AVFilterLink *inlink)
|
||||
buf_out->pts = av_rescale_q(s->first_pts, inlink->time_base,
|
||||
outlink->time_base) + s->frames_out;
|
||||
|
||||
avfilter_start_frame(outlink, buf_out);
|
||||
avfilter_draw_slice(outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_start_frame(outlink, buf_out);
|
||||
ff_draw_slice(outlink, 0, outlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
s->frames_out++;
|
||||
}
|
||||
flush_fifo(s->fifo);
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "libavutil/parseutils.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef f0r_instance_t (*f0r_construct_f)(unsigned int width, unsigned int height);
|
||||
typedef void (*f0r_destruct_f)(f0r_instance_t instance);
|
||||
@ -351,8 +352,8 @@ static void end_frame(AVFilterLink *inlink)
|
||||
(const uint32_t *)inpicref->data[0],
|
||||
(uint32_t *)outpicref->data[0]);
|
||||
avfilter_unref_buffer(inpicref);
|
||||
avfilter_draw_slice(outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, outlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(outpicref);
|
||||
}
|
||||
|
||||
@ -436,11 +437,11 @@ static int source_request_frame(AVFilterLink *outlink)
|
||||
picref->pts = frei0r->pts++;
|
||||
picref->pos = -1;
|
||||
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
frei0r->update(frei0r->instance, av_rescale_q(picref->pts, frei0r->time_base, (AVRational){1,1000}),
|
||||
NULL, (uint32_t *)picref->data[0]);
|
||||
avfilter_draw_slice(outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, outlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(picref);
|
||||
|
||||
return 0;
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "gradfun.h"
|
||||
#include "video.h"
|
||||
|
||||
DECLARE_ALIGNED(16, static const uint16_t, dither)[8][8] = {
|
||||
{0x00,0x60,0x18,0x78,0x06,0x66,0x1E,0x7E},
|
||||
@ -197,7 +198,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
outpicref = inpicref;
|
||||
|
||||
outlink->out_buf = outpicref;
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
}
|
||||
|
||||
static void null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { }
|
||||
@ -226,8 +227,8 @@ static void end_frame(AVFilterLink *inlink)
|
||||
av_image_copy_plane(outpic->data[p], outpic->linesize[p], inpic->data[p], inpic->linesize[p], w, h);
|
||||
}
|
||||
|
||||
avfilter_draw_slice(outlink, 0, inlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, inlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(inpic);
|
||||
if (outpic != inpic)
|
||||
avfilter_unref_buffer(outpic);
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
@ -140,7 +141,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
}
|
||||
}
|
||||
|
||||
avfilter_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_hflip = {
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
int Coefs[4][512*16];
|
||||
@ -318,8 +319,8 @@ static void end_frame(AVFilterLink *inlink)
|
||||
hqdn3d->Coefs[2],
|
||||
hqdn3d->Coefs[3]);
|
||||
|
||||
avfilter_draw_slice(outlink, 0, inpic->video->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, inpic->video->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(inpic);
|
||||
avfilter_unref_buffer(outpic);
|
||||
}
|
||||
|
@ -364,8 +364,8 @@ static void end_frame(AVFilterLink *inlink)
|
||||
fill_picref_from_iplimage(outpicref, &outimg, inlink->format);
|
||||
|
||||
avfilter_unref_buffer(inpicref);
|
||||
avfilter_draw_slice(outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, outlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(outpicref);
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
static const char *const var_names[] = {
|
||||
"E",
|
||||
@ -338,7 +339,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
}
|
||||
}
|
||||
|
||||
avfilter_draw_slice(outlink, y, h, slice_dir);
|
||||
ff_draw_slice(outlink, y, h, slice_dir);
|
||||
}
|
||||
|
||||
#define DEFINE_LUT_FILTER(name_, description_, init_) \
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
static const char *const var_names[] = {
|
||||
"E",
|
||||
@ -220,7 +221,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
if (!over->overpicref || over->overpicref->pts < outpicref->pts) {
|
||||
AVFilterBufferRef *old = over->overpicref;
|
||||
over->overpicref = NULL;
|
||||
avfilter_request_frame(ctx->inputs[OVERLAY]);
|
||||
ff_request_frame(ctx->inputs[OVERLAY]);
|
||||
if (over->overpicref) {
|
||||
if (old)
|
||||
avfilter_unref_buffer(old);
|
||||
@ -228,7 +229,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
over->overpicref = old;
|
||||
}
|
||||
|
||||
avfilter_start_frame(inlink->dst->outputs[0], outpicref);
|
||||
ff_start_frame(inlink->dst->outputs[0], outpicref);
|
||||
}
|
||||
|
||||
static void start_frame_overlay(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
@ -333,12 +334,12 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
over->overpicref->video->w, over->overpicref->video->h,
|
||||
y, outpicref->video->w, h);
|
||||
}
|
||||
avfilter_draw_slice(outlink, y, h, slice_dir);
|
||||
ff_draw_slice(outlink, y, h, slice_dir);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
{
|
||||
avfilter_end_frame(inlink->dst->outputs[0]);
|
||||
ff_end_frame(inlink->dst->outputs[0]);
|
||||
avfilter_unref_buffer(inlink->cur_buf);
|
||||
}
|
||||
|
||||
@ -350,12 +351,12 @@ static int poll_frame(AVFilterLink *link)
|
||||
{
|
||||
AVFilterContext *s = link->src;
|
||||
OverlayContext *over = s->priv;
|
||||
int ret = avfilter_poll_frame(s->inputs[OVERLAY]);
|
||||
int ret = ff_poll_frame(s->inputs[OVERLAY]);
|
||||
|
||||
if (ret == AVERROR_EOF)
|
||||
ret = !!over->overpicref;
|
||||
|
||||
return ret && avfilter_poll_frame(s->inputs[MAIN]);
|
||||
return ret && ff_poll_frame(s->inputs[MAIN]);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_overlay = {
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/avstring.h"
|
||||
#include "libavutil/eval.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
@ -337,12 +338,12 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
outpicref->video->w = pad->w;
|
||||
outpicref->video->h = pad->h;
|
||||
|
||||
avfilter_start_frame(inlink->dst->outputs[0], outpicref);
|
||||
ff_start_frame(inlink->dst->outputs[0], outpicref);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *link)
|
||||
{
|
||||
avfilter_end_frame(link->dst->outputs[0]);
|
||||
ff_end_frame(link->dst->outputs[0]);
|
||||
avfilter_unref_buffer(link->cur_buf);
|
||||
}
|
||||
|
||||
@ -366,7 +367,7 @@ static void draw_send_bar_slice(AVFilterLink *link, int y, int h, int slice_dir,
|
||||
link->dst->outputs[0]->out_buf->linesize,
|
||||
pad->line, pad->line_step, pad->hsub, pad->vsub,
|
||||
0, bar_y, pad->w, bar_h);
|
||||
avfilter_draw_slice(link->dst->outputs[0], bar_y, bar_h, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], bar_y, bar_h, slice_dir);
|
||||
}
|
||||
}
|
||||
|
||||
@ -400,7 +401,7 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
ff_draw_rectangle(outpic->data, outpic->linesize,
|
||||
pad->line, pad->line_step, pad->hsub, pad->vsub,
|
||||
pad->x + pad->in_w, y, pad->w - pad->x - pad->in_w, h);
|
||||
avfilter_draw_slice(link->dst->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], y, h, slice_dir);
|
||||
|
||||
draw_send_bar_slice(link, y, h, slice_dir, -1);
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
const AVPixFmtDescriptor *pix_desc;
|
||||
@ -76,7 +77,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
priv->pix_desc->flags & PIX_FMT_PSEUDOPAL)
|
||||
memcpy(outpicref->data[1], outpicref->data[1], 256*4);
|
||||
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
@ -106,7 +107,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
}
|
||||
}
|
||||
|
||||
avfilter_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_pixdesctest = {
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/avstring.h"
|
||||
#include "libavutil/eval.h"
|
||||
#include "libavutil/mathematics.h"
|
||||
@ -257,7 +258,7 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
AVFilterBufferRef *outpicref;
|
||||
|
||||
if (!scale->sws) {
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -277,7 +278,7 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
INT_MAX);
|
||||
|
||||
scale->slice_y = 0;
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
@ -288,7 +289,7 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
const uint8_t *data[4];
|
||||
|
||||
if (!scale->sws) {
|
||||
avfilter_draw_slice(link->dst->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], y, h, slice_dir);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -308,7 +309,7 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
|
||||
if (slice_dir == -1)
|
||||
scale->slice_y -= out_h;
|
||||
avfilter_draw_slice(link->dst->outputs[0], scale->slice_y, out_h, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], scale->slice_y, out_h, slice_dir);
|
||||
if (slice_dir == 1)
|
||||
scale->slice_y += out_h;
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "libavutil/fifo.h"
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "avfilter.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
static const char *const var_names[] = {
|
||||
@ -242,7 +243,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
sizeof(picref), NULL);
|
||||
return;
|
||||
}
|
||||
avfilter_start_frame(inlink->dst->outputs[0], avfilter_ref_buffer(picref, ~0));
|
||||
ff_start_frame(inlink->dst->outputs[0], avfilter_ref_buffer(picref, ~0));
|
||||
}
|
||||
}
|
||||
|
||||
@ -251,7 +252,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
SelectContext *select = inlink->dst->priv;
|
||||
|
||||
if (select->select && !select->cache_frames)
|
||||
avfilter_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
@ -262,7 +263,7 @@ static void end_frame(AVFilterLink *inlink)
|
||||
if (select->select) {
|
||||
if (select->cache_frames)
|
||||
return;
|
||||
avfilter_end_frame(inlink->dst->outputs[0]);
|
||||
ff_end_frame(inlink->dst->outputs[0]);
|
||||
}
|
||||
avfilter_unref_buffer(picref);
|
||||
}
|
||||
@ -277,15 +278,15 @@ static int request_frame(AVFilterLink *outlink)
|
||||
if (av_fifo_size(select->pending_frames)) {
|
||||
AVFilterBufferRef *picref;
|
||||
av_fifo_generic_read(select->pending_frames, &picref, sizeof(picref), NULL);
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
avfilter_draw_slice(outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
ff_draw_slice(outlink, 0, outlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(picref);
|
||||
return 0;
|
||||
}
|
||||
|
||||
while (!select->select) {
|
||||
int ret = avfilter_request_frame(inlink);
|
||||
int ret = ff_request_frame(inlink);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
@ -300,12 +301,12 @@ static int poll_frame(AVFilterLink *outlink)
|
||||
int count, ret;
|
||||
|
||||
if (!av_fifo_size(select->pending_frames)) {
|
||||
if ((count = avfilter_poll_frame(inlink)) <= 0)
|
||||
if ((count = ff_poll_frame(inlink)) <= 0)
|
||||
return count;
|
||||
/* request frame from input, and apply select condition to it */
|
||||
select->cache_frames = 1;
|
||||
while (count-- && av_fifo_space(select->pending_frames)) {
|
||||
ret = avfilter_request_frame(inlink);
|
||||
ret = ff_request_frame(inlink);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
||||
setpts->var_values[VAR_N] += 1.0;
|
||||
setpts->var_values[VAR_PREV_INPTS ] = TS2D(inpicref ->pts);
|
||||
setpts->var_values[VAR_PREV_OUTPTS] = TS2D(outpicref->pts);
|
||||
avfilter_start_frame(inlink->dst->outputs[0], outpicref);
|
||||
ff_start_frame(inlink->dst->outputs[0], outpicref);
|
||||
}
|
||||
|
||||
static av_cold void uninit(AVFilterContext *ctx)
|
||||
|
@ -119,7 +119,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
avfilter_unref_buffer(picref);
|
||||
}
|
||||
|
||||
avfilter_start_frame(outlink, picref2);
|
||||
ff_start_frame(outlink, picref2);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_settb = {
|
||||
|
@ -75,7 +75,7 @@ static void end_frame(AVFilterLink *inlink)
|
||||
checksum, plane_checksum[0], plane_checksum[1], plane_checksum[2], plane_checksum[3]);
|
||||
|
||||
showinfo->frame++;
|
||||
avfilter_end_frame(inlink->dst->outputs[0]);
|
||||
ff_end_frame(inlink->dst->outputs[0]);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_showinfo = {
|
||||
|
@ -73,7 +73,7 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
|
||||
av_log(link->dst, AV_LOG_DEBUG, "h:%d\n", slice->h);
|
||||
|
||||
avfilter_start_frame(link->dst->outputs[0], picref);
|
||||
ff_start_frame(link->dst->outputs[0], picref);
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
@ -83,16 +83,16 @@ static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
|
||||
if (slice_dir == 1) {
|
||||
for (y2 = y; y2 + slice->h <= y + h; y2 += slice->h)
|
||||
avfilter_draw_slice(link->dst->outputs[0], y2, slice->h, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], y2, slice->h, slice_dir);
|
||||
|
||||
if (y2 < y + h)
|
||||
avfilter_draw_slice(link->dst->outputs[0], y2, y + h - y2, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], y2, y + h - y2, slice_dir);
|
||||
} else if (slice_dir == -1) {
|
||||
for (y2 = y + h; y2 - slice->h >= y; y2 -= slice->h)
|
||||
avfilter_draw_slice(link->dst->outputs[0], y2 - slice->h, slice->h, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], y2 - slice->h, slice->h, slice_dir);
|
||||
|
||||
if (y2 > y)
|
||||
avfilter_draw_slice(link->dst->outputs[0], y, y2 - y, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], y, y2 - y, slice_dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
int hsub, vsub;
|
||||
@ -130,7 +131,7 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
outlink->out_buf->video->pixel_aspect.den = picref->video->pixel_aspect.num;
|
||||
}
|
||||
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0));
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *inlink)
|
||||
@ -191,8 +192,8 @@ static void end_frame(AVFilterLink *inlink)
|
||||
}
|
||||
|
||||
avfilter_unref_buffer(inpic);
|
||||
avfilter_draw_slice(outlink, 0, outpic->video->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_draw_slice(outlink, 0, outpic->video->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(outpic);
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
@ -224,8 +225,8 @@ static void end_frame(AVFilterLink *link)
|
||||
apply_unsharp(out->data[2], out->linesize[2], in->data[2], in->linesize[2], cw, ch, &unsharp->chroma);
|
||||
|
||||
avfilter_unref_buffer(in);
|
||||
avfilter_draw_slice(link->dst->outputs[0], 0, link->h, 1);
|
||||
avfilter_end_frame(link->dst->outputs[0]);
|
||||
ff_draw_slice(link->dst->outputs[0], 0, link->h, 1);
|
||||
ff_end_frame(link->dst->outputs[0]);
|
||||
avfilter_unref_buffer(out);
|
||||
}
|
||||
|
||||
|
@ -78,14 +78,14 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *inpicref)
|
||||
}
|
||||
}
|
||||
|
||||
avfilter_start_frame(link->dst->outputs[0], outpicref);
|
||||
ff_start_frame(link->dst->outputs[0], outpicref);
|
||||
}
|
||||
|
||||
static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
{
|
||||
AVFilterContext *ctx = link->dst;
|
||||
|
||||
avfilter_draw_slice(ctx->outputs[0], link->h - (y+h), h, -1 * slice_dir);
|
||||
ff_draw_slice(ctx->outputs[0], link->h - (y+h), h, -1 * slice_dir);
|
||||
}
|
||||
|
||||
AVFilter avfilter_vf_vflip = {
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
#include "yadif.h"
|
||||
|
||||
@ -229,10 +230,10 @@ static void return_frame(AVFilterContext *ctx, int is_second)
|
||||
} else {
|
||||
yadif->out->pts = AV_NOPTS_VALUE;
|
||||
}
|
||||
avfilter_start_frame(ctx->outputs[0], yadif->out);
|
||||
ff_start_frame(ctx->outputs[0], yadif->out);
|
||||
}
|
||||
avfilter_draw_slice(ctx->outputs[0], 0, link->h, 1);
|
||||
avfilter_end_frame(ctx->outputs[0]);
|
||||
ff_draw_slice(ctx->outputs[0], 0, link->h, 1);
|
||||
ff_end_frame(ctx->outputs[0]);
|
||||
|
||||
yadif->frame_pending = (yadif->mode&1) && !is_second;
|
||||
}
|
||||
@ -260,7 +261,7 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
yadif->prev = NULL;
|
||||
if (yadif->out->pts != AV_NOPTS_VALUE)
|
||||
yadif->out->pts *= 2;
|
||||
avfilter_start_frame(ctx->outputs[0], yadif->out);
|
||||
ff_start_frame(ctx->outputs[0], yadif->out);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -274,7 +275,7 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
yadif->out->video->interlaced = 0;
|
||||
if (yadif->out->pts != AV_NOPTS_VALUE)
|
||||
yadif->out->pts *= 2;
|
||||
avfilter_start_frame(ctx->outputs[0], yadif->out);
|
||||
ff_start_frame(ctx->outputs[0], yadif->out);
|
||||
}
|
||||
|
||||
static void end_frame(AVFilterLink *link)
|
||||
@ -286,8 +287,8 @@ static void end_frame(AVFilterLink *link)
|
||||
return;
|
||||
|
||||
if (yadif->auto_enable && !yadif->cur->video->interlaced) {
|
||||
avfilter_draw_slice(ctx->outputs[0], 0, link->h, 1);
|
||||
avfilter_end_frame(ctx->outputs[0]);
|
||||
ff_draw_slice(ctx->outputs[0], 0, link->h, 1);
|
||||
ff_end_frame(ctx->outputs[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -310,7 +311,7 @@ static int request_frame(AVFilterLink *link)
|
||||
if (yadif->eof)
|
||||
return AVERROR_EOF;
|
||||
|
||||
ret = avfilter_request_frame(link->src->inputs[0]);
|
||||
ret = ff_request_frame(link->src->inputs[0]);
|
||||
|
||||
if (ret == AVERROR_EOF && yadif->next) {
|
||||
AVFilterBufferRef *next = avfilter_ref_buffer(yadif->next, AV_PERM_READ);
|
||||
@ -335,14 +336,14 @@ static int poll_frame(AVFilterLink *link)
|
||||
if (yadif->frame_pending)
|
||||
return 1;
|
||||
|
||||
val = avfilter_poll_frame(link->src->inputs[0]);
|
||||
val = ff_poll_frame(link->src->inputs[0]);
|
||||
if (val <= 0)
|
||||
return val;
|
||||
|
||||
if (val==1 && !yadif->next) { //FIXME change API to not requre this red tape
|
||||
if ((ret = avfilter_request_frame(link->src->inputs[0])) < 0)
|
||||
if ((ret = ff_request_frame(link->src->inputs[0])) < 0)
|
||||
return ret;
|
||||
val = avfilter_poll_frame(link->src->inputs[0]);
|
||||
val = ff_poll_frame(link->src->inputs[0]);
|
||||
if (val <= 0)
|
||||
return val;
|
||||
}
|
||||
|
@ -162,7 +162,7 @@ AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, int
|
||||
|
||||
void ff_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
{
|
||||
avfilter_start_frame(link->dst->outputs[0], picref);
|
||||
ff_start_frame(link->dst->outputs[0], picref);
|
||||
}
|
||||
|
||||
static void default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
@ -175,13 +175,13 @@ static void default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
|
||||
if (outlink) {
|
||||
outlink->out_buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
|
||||
avfilter_copy_buffer_ref_props(outlink->out_buf, picref);
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0));
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(outlink->out_buf, ~0));
|
||||
}
|
||||
}
|
||||
|
||||
/* XXX: should we do the duplicating of the picture ref here, instead of
|
||||
* forcing the source filter to do it? */
|
||||
void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
void ff_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
{
|
||||
void (*start_frame)(AVFilterLink *, AVFilterBufferRef *);
|
||||
AVFilterPad *dst = link->dstpad;
|
||||
@ -213,7 +213,7 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
|
||||
void ff_null_end_frame(AVFilterLink *link)
|
||||
{
|
||||
avfilter_end_frame(link->dst->outputs[0]);
|
||||
ff_end_frame(link->dst->outputs[0]);
|
||||
}
|
||||
|
||||
static void default_end_frame(AVFilterLink *inlink)
|
||||
@ -231,11 +231,11 @@ static void default_end_frame(AVFilterLink *inlink)
|
||||
avfilter_unref_buffer(outlink->out_buf);
|
||||
outlink->out_buf = NULL;
|
||||
}
|
||||
avfilter_end_frame(outlink);
|
||||
ff_end_frame(outlink);
|
||||
}
|
||||
}
|
||||
|
||||
void avfilter_end_frame(AVFilterLink *link)
|
||||
void ff_end_frame(AVFilterLink *link)
|
||||
{
|
||||
void (*end_frame)(AVFilterLink *);
|
||||
|
||||
@ -254,7 +254,7 @@ void avfilter_end_frame(AVFilterLink *link)
|
||||
|
||||
void ff_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
{
|
||||
avfilter_draw_slice(link->dst->outputs[0], y, h, slice_dir);
|
||||
ff_draw_slice(link->dst->outputs[0], y, h, slice_dir);
|
||||
}
|
||||
|
||||
static void default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
|
||||
@ -265,10 +265,10 @@ static void default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir
|
||||
outlink = inlink->dst->outputs[0];
|
||||
|
||||
if (outlink)
|
||||
avfilter_draw_slice(outlink, y, h, slice_dir);
|
||||
ff_draw_slice(outlink, y, h, slice_dir);
|
||||
}
|
||||
|
||||
void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
void ff_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
{
|
||||
uint8_t *src[4], *dst[4];
|
||||
int i, j, vsub;
|
||||
@ -342,4 +342,16 @@ void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
{
|
||||
ff_null_draw_slice(link, y, h, slice_dir);
|
||||
}
|
||||
void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
|
||||
{
|
||||
ff_start_frame(link, picref);
|
||||
}
|
||||
void avfilter_end_frame(AVFilterLink *link)
|
||||
{
|
||||
ff_end_frame(link);
|
||||
}
|
||||
void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
|
||||
{
|
||||
ff_draw_slice(link, y, h, slice_dir);
|
||||
}
|
||||
#endif
|
||||
|
@ -29,4 +29,39 @@ void ff_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
|
||||
void ff_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
|
||||
void ff_null_end_frame(AVFilterLink *link);
|
||||
|
||||
/**
|
||||
* Notify the next filter of the start of a frame.
|
||||
*
|
||||
* @param link the output link the frame will be sent over
|
||||
* @param picref A reference to the frame about to be sent. The data for this
|
||||
* frame need only be valid once draw_slice() is called for that
|
||||
* portion. The receiving filter will free this reference when
|
||||
* it no longer needs it.
|
||||
*/
|
||||
void ff_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
|
||||
|
||||
/**
|
||||
* Notify the next filter that the current frame has finished.
|
||||
*
|
||||
* @param link the output link the frame was sent over
|
||||
*/
|
||||
void ff_end_frame(AVFilterLink *link);
|
||||
|
||||
/**
|
||||
* Send a slice to the next filter.
|
||||
*
|
||||
* Slices have to be provided in sequential order, either in
|
||||
* top-bottom or bottom-top order. If slices are provided in
|
||||
* non-sequential order the behavior of the function is undefined.
|
||||
*
|
||||
* @param link the output link over which the frame is being sent
|
||||
* @param y offset in pixels from the top of the image for this slice
|
||||
* @param h height of this slice in pixels
|
||||
* @param slice_dir the assumed direction for sending slices,
|
||||
* from the top slice to the bottom slice if the value is 1,
|
||||
* from the bottom slice to the top slice if the value is -1,
|
||||
* for other values the behavior of the function is undefined.
|
||||
*/
|
||||
void ff_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
|
||||
|
||||
#endif /* AVFILTER_VIDEO_H */
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/colorspace.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
@ -144,12 +145,12 @@ static int color_request_frame(AVFilterLink *link)
|
||||
picref->pts = color->pts++;
|
||||
picref->pos = -1;
|
||||
|
||||
avfilter_start_frame(link, avfilter_ref_buffer(picref, ~0));
|
||||
ff_start_frame(link, avfilter_ref_buffer(picref, ~0));
|
||||
ff_draw_rectangle(picref->data, picref->linesize,
|
||||
color->line, color->line_step, color->hsub, color->vsub,
|
||||
0, 0, color->w, color->h);
|
||||
avfilter_draw_slice(link, 0, color->h, 1);
|
||||
avfilter_end_frame(link);
|
||||
ff_draw_slice(link, 0, color->h, 1);
|
||||
ff_end_frame(link);
|
||||
avfilter_unref_buffer(picref);
|
||||
|
||||
return 0;
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "libavformat/avformat.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
const AVClass *class;
|
||||
@ -287,9 +288,9 @@ static int request_frame(AVFilterLink *outlink)
|
||||
return ret;
|
||||
|
||||
outpicref = avfilter_ref_buffer(movie->picref, ~0);
|
||||
avfilter_start_frame(outlink, outpicref);
|
||||
avfilter_draw_slice(outlink, 0, outlink->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_start_frame(outlink, outpicref);
|
||||
ff_draw_slice(outlink, 0, outlink->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(movie->picref);
|
||||
movie->picref = NULL;
|
||||
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "libavutil/parseutils.h"
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
const AVClass *class;
|
||||
@ -142,9 +143,9 @@ static int request_frame(AVFilterLink *outlink)
|
||||
test->nb_frame++;
|
||||
test->fill_picture_fn(outlink->src, picref);
|
||||
|
||||
avfilter_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
avfilter_draw_slice(outlink, 0, picref->video->h, 1);
|
||||
avfilter_end_frame(outlink);
|
||||
ff_start_frame(outlink, avfilter_ref_buffer(picref, ~0));
|
||||
ff_draw_slice(outlink, 0, picref->video->h, 1);
|
||||
ff_end_frame(outlink);
|
||||
avfilter_unref_buffer(picref);
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user