summaryrefslogtreecommitdiff
path: root/libavfilter/src_buffer.c
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-04-27 20:24:20 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-05-03 19:55:28 +0200
commitcc14cdec45c18ed4be6955197b004e796756557e (patch)
tree4d06987638f2303e9d93307b0c7cd8339b41fede /libavfilter/src_buffer.c
parentf94b150a0342fc5a7d0b0f0c82d0d9c3aec3c49f (diff)
src_buffer: move buffer copy in a separate function.
This will make merging with the audio part easier.
Diffstat (limited to 'libavfilter/src_buffer.c')
-rw-r--r--libavfilter/src_buffer.c37
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)