diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-07-19 11:14:04 +0200 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2012-07-20 13:16:23 +0200 |
commit | 97f86680eb761bb92878edff06c10b73b75258a8 (patch) | |
tree | 2b2e92e32f3b406ef93d41564236c58be21fbec0 /libavfilter/buffer.c | |
parent | b0629366a26628f19245ea2c06a6e366cb70f92f (diff) | |
download | ffmpeg-97f86680eb761bb92878edff06c10b73b75258a8.tar.gz |
lavfi: make copy_buffer_ref common.
Diffstat (limited to 'libavfilter/buffer.c')
-rw-r--r-- | libavfilter/buffer.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libavfilter/buffer.c b/libavfilter/buffer.c index 816e23c6a6..30663b5a70 100644 --- a/libavfilter/buffer.c +++ b/libavfilter/buffer.c @@ -22,10 +22,12 @@ #include "libavutil/audioconvert.h" #include "libavutil/avassert.h" +#include "libavutil/imgutils.h" #include "libavcodec/avcodec.h" #include "avfilter.h" #include "internal.h" +#include "audio.h" #include "avcodec.h" void ff_avfilter_default_free_buffer(AVFilterBuffer *ptr) @@ -175,3 +177,40 @@ void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *s default: break; } } + +AVFilterBufferRef *ff_copy_buffer_ref(AVFilterLink *outlink, + AVFilterBufferRef *ref) +{ + AVFilterBufferRef *buf; + int channels; + + switch (outlink->type) { + + case AVMEDIA_TYPE_VIDEO: + buf = ff_get_video_buffer(outlink, AV_PERM_WRITE, + ref->video->w, ref->video->h); + if(!buf) + return NULL; + av_image_copy(buf->data, buf->linesize, + (void*)ref->data, ref->linesize, + ref->format, ref->video->w, ref->video->h); + break; + + case AVMEDIA_TYPE_AUDIO: + buf = ff_get_audio_buffer(outlink, AV_PERM_WRITE, + ref->audio->nb_samples); + if(!buf) + return NULL; + channels = av_get_channel_layout_nb_channels(ref->audio->channel_layout); + av_samples_copy(buf->extended_data, ref->buf->extended_data, + 0, 0, ref->audio->nb_samples, + channels, + ref->format); + break; + + default: + return NULL; + } + avfilter_copy_buffer_ref_props(buf, ref); + return buf; +} |