1 /*
2 * Copyright 2007 Bobby Bingham
3 * Copyright Stefano Sabatini <stefasab gmail com>
4 * Copyright Vitor Sessak <vitor1001 gmail com>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 #include <string.h>
24 #include <stdio.h>
25
30
34
36 {
38 }
39
40 /* TODO: set the buffer's priv member to a context structure for the whole
41 * filter chain. This will allow for a buffer pool instead of the constant
42 * alloc & free cycle currently implemented. */
44 {
47
48 if (!frame)
50
54
56 if (ret < 0)
58
60 }
61
62 #if FF_API_AVFILTERBUFFER
63 AVFilterBufferRef *
66 {
67 AVFilterBuffer *pic =
av_mallocz(
sizeof(AVFilterBuffer));
68 AVFilterBufferRef *picref =
av_mallocz(
sizeof(AVFilterBufferRef));
69
70 if (!pic || !picref)
71 goto fail;
72
73 picref->buf = pic;
74 picref->buf->free = ff_avfilter_default_free_buffer;
75 if (!(picref->video =
av_mallocz(
sizeof(AVFilterBufferRefVideoProps))))
76 goto fail;
77
78 pic->w = picref->video->w = w;
79 pic->h = picref->video->h = h;
80
81 /* make sure the buffer gets read permission or it's useless for output */
82 picref->perms = perms | AV_PERM_READ;
83
84 pic->refcount = 1;
86 pic->format = picref->format = format;
87
88 memcpy(pic->data, data, 4*sizeof(data[0]));
89 memcpy(pic->linesize, linesize, 4*sizeof(linesize[0]));
90 memcpy(picref->data, pic->data, sizeof(picref->data));
91 memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
92
93 pic-> extended_data = pic->data;
94 picref->extended_data = picref->data;
95
97
98 return picref;
99
100 fail:
101 if (picref && picref->video)
106 }
107 #endif
108
110 {
112
114
117
118 if (!ret)
120
122 }