summaryrefslogtreecommitdiff
path: root/libavfilter/src_buffer.c
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-04-27 20:11:00 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-05-03 19:55:28 +0200
commitf94b150a0342fc5a7d0b0f0c82d0d9c3aec3c49f (patch)
tree5bdc2e52c6fa0ae3b9c4c1b39b0cd95ac0ca43b6 /libavfilter/src_buffer.c
parent3985ec0ee68564c213cb0862c8854899690f4321 (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.c55
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 {