static AVFrame *get_video_buffer(AVFilterLink *inlink, int w, int h) { TransContext *trans = inlink->dst->priv; return trans->passthrough ? ff_null_get_video_buffer (inlink, w, h) : ff_default_get_video_buffer(inlink, w, h); }
static AVFilterBufferRef *get_video_buffer(AVFilterLink *link, int perms, int w, int h) { AVFilterBufferRef *picref = ff_default_get_video_buffer(link, perms, w, h); FFSWAP(uint8_t*, picref->data[1], picref->data[2]); FFSWAP(int, picref->linesize[1], picref->linesize[2]); return picref; }
static void fixstride(AVFilterLink *link, AVFrame *f) { AVFrame *dst = ff_default_get_video_buffer(link, f->width, f->height); if(!dst) return; av_frame_copy_props(dst, f); av_image_copy(dst->data, dst->linesize, (const uint8_t **)f->data, f->linesize, dst->format, dst->width, dst->height); av_frame_unref(f); av_frame_move_ref(f, dst); av_frame_free(&dst); }
AVFrame *ff_get_video_buffer(AVFilterLink *link, int w, int h) { AVFrame *ret = NULL; FF_TPRINTF_START(NULL, get_video_buffer); ff_tlog_link(NULL, link, 0); if (link->dstpad->get_video_buffer) ret = link->dstpad->get_video_buffer(link, w, h); if (!ret) ret = ff_default_get_video_buffer(link, w, h); return ret; }
static AVFilterBufferRef *get_video_buffer(AVFilterLink *link, int perms, int w, int h) { FlipContext *flip = link->dst->priv; AVFilterBufferRef *picref; int i; if (!(perms & AV_PERM_NEG_LINESIZES)) return ff_default_get_video_buffer(link, perms, w, h); picref = avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h); for (i = 0; i < 4; i ++) { int vsub = i == 1 || i == 2 ? flip->vsub : 0; if (picref->data[i]) { picref->data[i] += ((h >> vsub)-1) * picref->linesize[i]; picref->linesize[i] = -picref->linesize[i]; } }
static AVFrame *hwmap_get_buffer(AVFilterLink *inlink, int w, int h) { AVFilterContext *avctx = inlink->dst; AVFilterLink *outlink = avctx->outputs[0]; HWMapContext *ctx = avctx->priv; if (ctx->reverse && !inlink->hw_frames_ctx) { AVFrame *src, *dst; int err; src = ff_get_video_buffer(outlink, w, h); if (!src) { av_log(avctx, AV_LOG_ERROR, "Failed to allocate source " "frame for software mapping.\n"); return NULL; } dst = av_frame_alloc(); if (!dst) { av_frame_free(&src); return NULL; } err = av_hwframe_map(dst, src, ctx->mode); if (err) { av_log(avctx, AV_LOG_ERROR, "Failed to map frame to " "software: %d.\n", err); av_frame_free(&src); av_frame_free(&dst); return NULL; } av_frame_free(&src); return dst; } else { return ff_default_get_video_buffer(inlink, w, h); } }
static AVFrame *get_video_buffer(AVFilterLink *link, int w, int h) { AVFrame *picref = ff_default_get_video_buffer(link, w, h); do_swap(picref); return picref; }