AVFilterContext *input_video_filter;
AVFrame *filter_frame;
int has_filter_frame;
- AVFilterPicRef *picref;
+ AVFilterBufferRef *picref;
#endif
} AVInputStream;
}
static int get_filtered_video_pic(AVFilterContext *ctx,
- AVFilterPicRef **picref, AVFrame *pic2,
+ AVFilterBufferRef **picref, AVFrame *pic2,
uint64_t *pts)
{
- AVFilterPicRef *pic;
+ AVFilterBufferRef *pic;
if(avfilter_request_frame(ctx->inputs[0]))
return -1;
enum PixelFormat pix_fmt;
#if CONFIG_AVFILTER
- AVFilterPicRef *picref;
+ AVFilterBufferRef *picref;
#endif
} VideoPicture;
static int input_get_buffer(AVCodecContext *codec, AVFrame *pic)
{
AVFilterContext *ctx = codec->opaque;
- AVFilterPicRef *ref;
+ AVFilterBufferRef *ref;
int perms = AV_PERM_WRITE;
int i, w, h, stride[4];
unsigned edge;
static int input_reget_buffer(AVCodecContext *codec, AVFrame *pic)
{
- AVFilterPicRef *ref = pic->opaque;
+ AVFilterBufferRef *ref = pic->opaque;
if (pic->data[0] == NULL) {
pic->buffer_hints |= FF_BUFFER_HINTS_READABLE;
static int input_request_frame(AVFilterLink *link)
{
FilterPriv *priv = link->src->priv;
- AVFilterPicRef *picref;
+ AVFilterBufferRef *picref;
int64_t pts = 0;
AVPacket pkt;
int ret;
static int get_filtered_video_frame(AVFilterContext *ctx, AVFrame *frame,
int64_t *pts, int64_t *pos)
{
- AVFilterPicRef *pic;
+ AVFilterBufferRef *pic;
if(avfilter_request_frame(ctx->inputs[0]))
return -1;
#define link_dpad(link) link->dst-> input_pads[link->dstpad]
#define link_spad(link) link->src->output_pads[link->srcpad]
-AVFilterPicRef *avfilter_ref_pic(AVFilterPicRef *ref, int pmask)
+AVFilterBufferRef *avfilter_ref_pic(AVFilterBufferRef *ref, int pmask)
{
- AVFilterPicRef *ret = av_malloc(sizeof(AVFilterPicRef));
+ AVFilterBufferRef *ret = av_malloc(sizeof(AVFilterBufferRef));
*ret = *ref;
ret->perms &= pmask;
ret->pic->refcount ++;
return ret;
}
-void avfilter_unref_pic(AVFilterPicRef *ref)
+void avfilter_unref_pic(AVFilterBufferRef *ref)
{
if(!(--ref->pic->refcount))
ref->pic->free(ref->pic);
return 0;
}
-void ff_dprintf_picref(void *ctx, AVFilterPicRef *picref, int end)
+void ff_dprintf_picref(void *ctx, AVFilterBufferRef *picref, int end)
{
dprintf(ctx,
"picref[%p data[%p, %p, %p, %p] linesize[%d, %d, %d, %d] pts:%"PRId64" pos:%"PRId64" a:%d/%d s:%dx%d]%s",
end ? "\n" : "");
}
-AVFilterPicRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
+AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
{
- AVFilterPicRef *ret = NULL;
+ AVFilterBufferRef *ret = NULL;
FF_DPRINTF_START(NULL, get_video_buffer); ff_dprintf_link(NULL, link, 0); dprintf(NULL, " perms:%d w:%d h:%d\n", perms, w, h);
/* 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, AVFilterPicRef *picref)
+void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
- void (*start_frame)(AVFilterLink *, AVFilterPicRef *);
+ void (*start_frame)(AVFilterLink *, AVFilterBufferRef *);
AVFilterPad *dst = &link_dpad(link);
FF_DPRINTF_START(NULL, start_frame); ff_dprintf_link(NULL, link, 0); dprintf(NULL, " "); ff_dprintf_picref(NULL, picref, 1);
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 1
-#define LIBAVFILTER_VERSION_MINOR 28
+#define LIBAVFILTER_VERSION_MINOR 29
#define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
/**
* A reference-counted buffer data type used by the filter system. Filters
* should not store pointers to this structure directly, but instead use the
- * AVFilterPicRef structure below.
+ * AVFilterBufferRef structure below.
*/
typedef struct AVFilterBuffer
{
*
* TODO: add anything necessary for frame reordering
*/
-typedef struct AVFilterPicRef
+typedef struct AVFilterBufferRef
{
AVFilterBuffer *pic; ///< the picture that this is a reference to
uint8_t *data[4]; ///< picture data for each plane
int interlaced; ///< is frame interlaced
int top_field_first;
-} AVFilterPicRef;
+} AVFilterBufferRef;
/**
* Copy properties of src to dst, without copying the actual video
* data.
*/
-static inline void avfilter_copy_picref_props(AVFilterPicRef *dst, AVFilterPicRef *src)
+static inline void avfilter_copy_picref_props(AVFilterBufferRef *dst, AVFilterBufferRef *src)
{
dst->pts = src->pts;
dst->pos = src->pos;
* @return a new reference to the picture with the same properties as the
* old, excluding any permissions denied by pmask
*/
-AVFilterPicRef *avfilter_ref_pic(AVFilterPicRef *ref, int pmask);
+AVFilterBufferRef *avfilter_ref_pic(AVFilterBufferRef *ref, int pmask);
/**
* Remove a reference to a picture. If this is the last reference to the
* picture, the picture itself is also automatically freed.
* @param ref reference to the picture
*/
-void avfilter_unref_pic(AVFilterPicRef *ref);
+void avfilter_unref_pic(AVFilterBufferRef *ref);
/**
* A list of supported formats for one end of a filter link. This is used
*
* Input video pads only.
*/
- void (*start_frame)(AVFilterLink *link, AVFilterPicRef *picref);
+ void (*start_frame)(AVFilterLink *link, AVFilterBufferRef *picref);
/**
* Callback function to get a buffer. If NULL, the filter system will
*
* Input video pads only.
*/
- AVFilterPicRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h);
+ AVFilterBufferRef *(*get_video_buffer)(AVFilterLink *link, int perms, int w, int h);
/**
* Callback called after the slices of a frame are completely sent. If
};
/** default handler for start_frame() for video inputs */
-void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref);
+void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
/** default handler for draw_slice() for video inputs */
void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
/** default handler for end_frame() for video inputs */
/** default handler for config_props() for video inputs */
int avfilter_default_config_input_link (AVFilterLink *link);
/** default handler for get_video_buffer() for video inputs */
-AVFilterPicRef *avfilter_default_get_video_buffer(AVFilterLink *link,
+AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link,
int perms, int w, int h);
/**
* A helper for query_formats() which sets all links to the same list of
int avfilter_default_query_formats(AVFilterContext *ctx);
/** start_frame() handler for filters which simply pass video along */
-void avfilter_null_start_frame(AVFilterLink *link, AVFilterPicRef *picref);
+void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
/** draw_slice() handler for filters which simply pass video along */
void avfilter_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir);
void avfilter_null_end_frame(AVFilterLink *link);
/** get_video_buffer() handler for filters which simply pass video along */
-AVFilterPicRef *avfilter_null_get_video_buffer(AVFilterLink *link,
+AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link,
int perms, int w, int h);
/**
* for the destination. This should not be accessed directly by the
* filters.
*/
- AVFilterPicRef *srcpic;
+ AVFilterBufferRef *srcpic;
- AVFilterPicRef *cur_pic;
- AVFilterPicRef *outpic;
+ AVFilterBufferRef *cur_pic;
+ AVFilterBufferRef *outpic;
};
/**
* @return A reference to the picture. This must be unreferenced with
* avfilter_unref_pic when you are finished with it.
*/
-AVFilterPicRef *avfilter_get_video_buffer(AVFilterLink *link, int perms,
+AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms,
int w, int h);
/**
* portion. The receiving filter will free this reference when
* it no longer needs it.
*/
-void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref);
+void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref);
/**
* Notifie the next filter that the current frame has finished.
/* TODO: set the buffer's priv member to a context structure for the whole
* filter chain. This will allow for a buffer pool instead of the constant
* alloc & free cycle currently implemented. */
-AVFilterPicRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
+AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
{
AVFilterBuffer *pic = av_mallocz(sizeof(AVFilterBuffer));
- AVFilterPicRef *ref = av_mallocz(sizeof(AVFilterPicRef));
+ AVFilterBufferRef *ref = av_mallocz(sizeof(AVFilterBufferRef));
int i, tempsize;
char *buf;
return ref;
}
-void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+void avfilter_default_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
AVFilterLink *out = NULL;
return 0;
}
-void avfilter_null_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+void avfilter_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
avfilter_start_frame(link->dst->outputs[0], picref);
}
avfilter_end_frame(link->dst->outputs[0]);
}
-AVFilterPicRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
+AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h)
{
return avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h);
}
#include "avfilter.h"
-void ff_dprintf_picref(void *ctx, AVFilterPicRef *picref, int end);
+void ff_dprintf_picref(void *ctx, AVFilterBufferRef *picref, int end);
void ff_dprintf_link(void *ctx, AVFilterLink *link, int end);
return 0;
}
-static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
AspectContext *aspect = link->dst->priv;
return 0;
}
-static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
CropContext *crop = link->dst->priv;
- AVFilterPicRef *ref2 = avfilter_ref_pic(picref, ~0);
+ AVFilterBufferRef *ref2 = avfilter_ref_pic(picref, ~0);
int i;
ref2->w = crop->w;
return 0;
}
-static void draw_rectangle(AVFilterPicRef *outpic, uint8_t *line[4], int line_step[4],
+static void draw_rectangle(AVFilterBufferRef *outpic, uint8_t *line[4], int line_step[4],
int hsub, int vsub, int x, int y, int w, int h)
{
int i, plane;
return 0;
}
-static AVFilterPicRef *get_video_buffer(AVFilterLink *inlink, int perms, int w, int h)
+static AVFilterBufferRef *get_video_buffer(AVFilterLink *inlink, int perms, int w, int h)
{
PadContext *pad = inlink->dst->priv;
- AVFilterPicRef *picref = avfilter_get_video_buffer(inlink->dst->outputs[0], perms,
+ AVFilterBufferRef *picref = avfilter_get_video_buffer(inlink->dst->outputs[0], perms,
w + (pad->w - pad->in_w),
h + (pad->h - pad->in_h));
int plane;
return picref;
}
-static void start_frame(AVFilterLink *inlink, AVFilterPicRef *inpicref)
+static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
{
PadContext *pad = inlink->dst->priv;
- AVFilterPicRef *outpicref = avfilter_ref_pic(inpicref, ~0);
+ AVFilterBufferRef *outpicref = avfilter_ref_pic(inpicref, ~0);
int plane;
inlink->dst->outputs[0]->outpic = outpicref;
static void draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
{
PadContext *pad = link->dst->priv;
- AVFilterPicRef *outpic = link->dst->outputs[0]->outpic;
+ AVFilterBufferRef *outpic = link->dst->outputs[0]->outpic;
y += pad->y;
static int color_request_frame(AVFilterLink *link)
{
ColorContext *color = link->src->priv;
- AVFilterPicRef *picref = avfilter_get_video_buffer(link, AV_PERM_WRITE, color->w, color->h);
+ AVFilterBufferRef *picref = avfilter_get_video_buffer(link, AV_PERM_WRITE, color->w, color->h);
picref->pixel_aspect = (AVRational) {1, 1};
picref->pts = av_rescale_q(color->pts++, color->time_base, AV_TIME_BASE_Q);
picref->pos = 0;
return 0;
}
-static void start_frame(AVFilterLink *inlink, AVFilterPicRef *picref)
+static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
{
PixdescTestContext *priv = inlink->dst->priv;
AVFilterLink *outlink = inlink->dst->outputs[0];
- AVFilterPicRef *outpicref;
+ AVFilterBufferRef *outpicref;
int i;
outlink->outpic = avfilter_get_video_buffer(outlink, AV_PERM_WRITE,
static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
{
PixdescTestContext *priv = inlink->dst->priv;
- AVFilterPicRef *inpic = inlink->cur_pic;
- AVFilterPicRef *outpic = inlink->dst->outputs[0]->outpic;
+ AVFilterBufferRef *inpic = inlink->cur_pic;
+ AVFilterBufferRef *outpic = inlink->dst->outputs[0]->outpic;
int i, c, w = inlink->w;
for (c = 0; c < priv->pix_desc->nb_components; c++) {
return !scale->sws;
}
-static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
ScaleContext *scale = link->dst->priv;
AVFilterLink *outlink = link->dst->outputs[0];
- AVFilterPicRef *outpicref;
+ AVFilterBufferRef *outpicref;
scale->hsub = av_pix_fmt_descriptors[link->format].log2_chroma_w;
scale->vsub = av_pix_fmt_descriptors[link->format].log2_chroma_h;
{
ScaleContext *scale = link->dst->priv;
int out_h;
- AVFilterPicRef *cur_pic = link->cur_pic;
+ AVFilterBufferRef *cur_pic = link->cur_pic;
const uint8_t *data[4];
if (scale->slice_y == 0 && slice_dir == -1)
return 0;
}
-static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
SliceContext *slice = link->dst->priv;
static void end_frame(AVFilterLink *link)
{
UnsharpContext *unsharp = link->dst->priv;
- AVFilterPicRef *in = link->cur_pic;
- AVFilterPicRef *out = link->dst->outputs[0]->outpic;
+ AVFilterBufferRef *in = link->cur_pic;
+ AVFilterBufferRef *out = link->dst->outputs[0]->outpic;
unsharpen(out->data[0], in->data[0], out->linesize[0], in->linesize[0], link->w, link->h, &unsharp->luma);
unsharpen(out->data[1], in->data[1], out->linesize[1], in->linesize[1], CHROMA_WIDTH(link), CHROMA_HEIGHT(link), &unsharp->chroma);
return 0;
}
-static AVFilterPicRef *get_video_buffer(AVFilterLink *link, int perms,
+static AVFilterBufferRef *get_video_buffer(AVFilterLink *link, int perms,
int w, int h)
{
FlipContext *flip = link->dst->priv;
int i;
- AVFilterPicRef *picref = avfilter_get_video_buffer(link->dst->outputs[0],
+ AVFilterBufferRef *picref = avfilter_get_video_buffer(link->dst->outputs[0],
perms, w, h);
for (i = 0; i < 4; i ++) {
return picref;
}
-static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
FlipContext *flip = link->dst->priv;
int i;
#include "avfilter.h"
-static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
+static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
}
static int request_frame(AVFilterLink *link)
{
BufferSourceContext *c = link->src->priv;
- AVFilterPicRef *picref;
+ AVFilterBufferRef *picref;
if (!c->has_frame) {
av_log(link->src, AV_LOG_ERROR,