1/* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19/** 20 * @file 21 * copy video filter 22 */ 23 24#include "libavutil/imgutils.h" 25#include "libavutil/internal.h" 26#include "avfilter.h" 27#include "internal.h" 28#include "video.h" 29 30static int filter_frame(AVFilterLink *inlink, AVFrame *in) 31{ 32 AVFilterLink *outlink = inlink->dst->outputs[0]; 33 AVFrame *out = ff_get_video_buffer(outlink, in->width, in->height); 34 35 if (!out) { 36 av_frame_free(&in); 37 return AVERROR(ENOMEM); 38 } 39 av_frame_copy_props(out, in); 40 av_frame_copy(out, in); 41 av_frame_free(&in); 42 return ff_filter_frame(outlink, out); 43} 44 45static const AVFilterPad avfilter_vf_copy_inputs[] = { 46 { 47 .name = "default", 48 .type = AVMEDIA_TYPE_VIDEO, 49 .filter_frame = filter_frame, 50 }, 51 { NULL } 52}; 53 54static const AVFilterPad avfilter_vf_copy_outputs[] = { 55 { 56 .name = "default", 57 .type = AVMEDIA_TYPE_VIDEO, 58 }, 59 { NULL } 60}; 61 62AVFilter ff_vf_copy = { 63 .name = "copy", 64 .description = NULL_IF_CONFIG_SMALL("Copy the input video unchanged to the output."), 65 .inputs = avfilter_vf_copy_inputs, 66 .outputs = avfilter_vf_copy_outputs, 67}; 68