diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-04-27 20:24:20 +0200 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2012-05-03 19:55:28 +0200 |
commit | cc14cdec45c18ed4be6955197b004e796756557e (patch) | |
tree | 4d06987638f2303e9d93307b0c7cd8339b41fede /libavfilter | |
parent | f94b150a0342fc5a7d0b0f0c82d0d9c3aec3c49f (diff) | |
download | ffmpeg-cc14cdec45c18ed4be6955197b004e796756557e.tar.gz |
src_buffer: move buffer copy in a separate function.
This will make merging with the audio part easier.
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/src_buffer.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/libavfilter/src_buffer.c b/libavfilter/src_buffer.c index 8e5e1feb63..52c4c4ac71 100644 --- a/libavfilter/src_buffer.c +++ b/libavfilter/src_buffer.c @@ -133,11 +133,33 @@ static int check_format_change(AVFilterContext *buffer_filter, } } +static AVFilterBufferRef *copy_buffer_ref(AVFilterContext *ctx, + AVFilterBufferRef *ref) +{ + AVFilterLink *outlink = ctx->outputs[0]; + AVFilterBufferRef *buf; + + switch (outlink->type) { + + case AVMEDIA_TYPE_VIDEO: + buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, + ref->video->w, ref->video->h); + av_image_copy(buf->data, buf->linesize, + (void*)ref->data, ref->linesize, + ref->format, ref->video->w, ref->video->h); + break; + + default: + return NULL; + } + avfilter_copy_buffer_ref_props(buf, ref); + return buf; +} + int av_buffersrc_add_ref(AVFilterContext *buffer_filter, AVFilterBufferRef *picref, int flags) { BufferSourceContext *c = buffer_filter->priv; - AVFilterLink *outlink = buffer_filter->outputs[0]; AVFilterBufferRef *buf; int ret; @@ -157,17 +179,10 @@ int av_buffersrc_add_ref(AVFilterContext *buffer_filter, if (ret < 0) return ret; } - if (flags & AV_BUFFERSRC_FLAG_NO_COPY) { + if (flags & AV_BUFFERSRC_FLAG_NO_COPY) buf = picref; - } else { - buf = avfilter_get_video_buffer(outlink, AV_PERM_WRITE, - picref->video->w, picref->video->h); - av_image_copy(buf->data, buf->linesize, - (void*)picref->data, picref->linesize, - picref->format, picref->video->w, picref->video->h); - avfilter_copy_buffer_ref_props(buf, picref); - - } + else + buf = copy_buffer_ref(buffer_filter, picref); if ((ret = av_fifo_generic_write(c->fifo, &buf, sizeof(buf), NULL)) < 0) { if (buf != picref) |