diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-04-27 22:11:00 +0400 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2012-05-03 21:55:28 +0400 |
commit | f94b150a0342fc5a7d0b0f0c82d0d9c3aec3c49f (patch) | |
tree | 5bdc2e52c6fa0ae3b9c4c1b39b0cd95ac0ca43b6 /libavfilter/src_buffer.c | |
parent | 3985ec0ee68564c213cb0862c8854899690f4321 (diff) |
src_buffer: move format change check in a separate function.
This will make merging the check with the audio part easier.
Diffstat (limited to 'libavfilter/src_buffer.c')
-rw-r--r-- | libavfilter/src_buffer.c | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/libavfilter/src_buffer.c b/libavfilter/src_buffer.c index 85d03b0289..8e5e1feb63 100644 --- a/libavfilter/src_buffer.c +++ b/libavfilter/src_buffer.c @@ -69,27 +69,12 @@ typedef struct { return AVERROR(EINVAL);\ } -int av_buffersrc_add_ref(AVFilterContext *buffer_filter, - AVFilterBufferRef *picref, int flags) +static int check_format_change_video(AVFilterContext *buffer_filter, + AVFilterBufferRef *picref) { BufferSourceContext *c = buffer_filter->priv; - AVFilterLink *outlink = buffer_filter->outputs[0]; - AVFilterBufferRef *buf; int ret; - if (!picref) { - c->eof = 1; - return 0; - } else if (c->eof) - return AVERROR(EINVAL); - - if (!av_fifo_space(c->fifo) && - (ret = av_fifo_realloc2(c->fifo, av_fifo_size(c->fifo) + - sizeof(buf))) < 0) - return ret; - - if (!(flags & AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT)) { - /* TODO reindent */ if (picref->video->w != c->w || picref->video->h != c->h || picref->format != c->pix_fmt) { AVFilterContext *scale = buffer_filter->outputs[0]->dst; AVFilterLink *link; @@ -134,8 +119,44 @@ int av_buffersrc_add_ref(AVFilterContext *buffer_filter, if ((ret = link->srcpad->config_props(link)) < 0) return ret; } + return 0; +} + +static int check_format_change(AVFilterContext *buffer_filter, + AVFilterBufferRef *picref) +{ + switch (buffer_filter->outputs[0]->type) { + case AVMEDIA_TYPE_VIDEO: + return check_format_change_video(buffer_filter, picref); + default: + return AVERROR(ENOSYS); } +} + +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; + if (!picref) { + c->eof = 1; + return 0; + } else if (c->eof) + return AVERROR(EINVAL); + + if (!av_fifo_space(c->fifo) && + (ret = av_fifo_realloc2(c->fifo, av_fifo_size(c->fifo) + + sizeof(buf))) < 0) + return ret; + + if (!(flags & AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT)) { + ret = check_format_change(buffer_filter, picref); + if (ret < 0) + return ret; + } if (flags & AV_BUFFERSRC_FLAG_NO_COPY) { buf = picref; } else { |