yading@10: /* yading@10: * This file is part of FFmpeg. yading@10: * yading@10: * FFmpeg is free software; you can redistribute it and/or yading@10: * modify it under the terms of the GNU Lesser General Public yading@10: * License as published by the Free Software Foundation; either yading@10: * version 2.1 of the License, or (at your option) any later version. yading@10: * yading@10: * FFmpeg is distributed in the hope that it will be useful, yading@10: * but WITHOUT ANY WARRANTY; without even the implied warranty of yading@10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yading@10: * Lesser General Public License for more details. yading@10: * yading@10: * You should have received a copy of the GNU Lesser General Public yading@10: * License along with FFmpeg; if not, write to the Free Software yading@10: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA yading@10: */ yading@10: yading@10: /** yading@10: * @file yading@10: * copy video filter yading@10: */ yading@10: yading@10: #include "libavutil/imgutils.h" yading@10: #include "libavutil/internal.h" yading@10: #include "avfilter.h" yading@10: #include "internal.h" yading@10: #include "video.h" yading@10: yading@10: static int filter_frame(AVFilterLink *inlink, AVFrame *in) yading@10: { yading@10: AVFilterLink *outlink = inlink->dst->outputs[0]; yading@10: AVFrame *out = ff_get_video_buffer(outlink, in->width, in->height); yading@10: yading@10: if (!out) { yading@10: av_frame_free(&in); yading@10: return AVERROR(ENOMEM); yading@10: } yading@10: av_frame_copy_props(out, in); yading@10: av_image_copy(out->data, out->linesize, in->data, in->linesize, yading@10: in->format, in->width, in->height); yading@10: yading@10: av_frame_free(&in); yading@10: return ff_filter_frame(outlink, out); yading@10: } yading@10: yading@10: static const AVFilterPad avfilter_vf_copy_inputs[] = { yading@10: { yading@10: .name = "default", yading@10: .type = AVMEDIA_TYPE_VIDEO, yading@10: .get_video_buffer = ff_null_get_video_buffer, yading@10: .filter_frame = filter_frame, yading@10: }, yading@10: { NULL } yading@10: }; yading@10: yading@10: static const AVFilterPad avfilter_vf_copy_outputs[] = { yading@10: { yading@10: .name = "default", yading@10: .type = AVMEDIA_TYPE_VIDEO, yading@10: }, yading@10: { NULL } yading@10: }; yading@10: yading@10: AVFilter avfilter_vf_copy = { yading@10: .name = "copy", yading@10: .description = NULL_IF_CONFIG_SMALL("Copy the input video unchanged to the output."), yading@10: yading@10: .inputs = avfilter_vf_copy_inputs, yading@10: .outputs = avfilter_vf_copy_outputs, yading@10: };