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 0 //POOL
50 if (pool) {
52 picref = pool->
pic[i];
53 if (picref && picref->buf->format == link->
format && picref->buf->w == w && picref->buf->h == h) {
54 AVFilterBuffer *pic = picref->buf;
58 picref->video->w = w;
59 picref->video->h = h;
60 picref->perms = full_perms;
61 picref->format = link->
format;
62 pic->refcount = 1;
63 memcpy(picref->data, pic->data, sizeof(picref->data));
64 memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
66 return picref;
67 }
68 }
69 } else {
72 }
73 #endif
74 if (!frame)
75 return NULL;
76
80
82 if (ret < 0)
84
85 #if 0 //POOL
86 memset(
data[0], 128, i);
87
88 picref->buf->priv = pool;
89 picref->buf->free = NULL;
91 #endif
92
94 }
95
96 #if FF_API_AVFILTERBUFFER
97 AVFilterBufferRef *
98 avfilter_get_video_buffer_ref_from_arrays(
uint8_t *
const data[4],
const int linesize[4],
int perms,
100 {
101 AVFilterBuffer *pic =
av_mallocz(
sizeof(AVFilterBuffer));
102 AVFilterBufferRef *picref =
av_mallocz(
sizeof(AVFilterBufferRef));
103
104 if (!pic || !picref)
105 goto fail;
106
107 picref->buf = pic;
109 if (!(picref->video =
av_mallocz(
sizeof(AVFilterBufferRefVideoProps))))
110 goto fail;
111
112 pic->w = picref->video->w = w;
113 pic->h = picref->video->h = h;
114
115 /* make sure the buffer gets read permission or it's useless for output */
116 picref->perms = perms | AV_PERM_READ;
117
118 pic->refcount = 1;
120 pic->format = picref->format = format;
121
122 memcpy(pic->data, data, 4*sizeof(data[0]));
123 memcpy(pic->linesize, linesize, 4*sizeof(linesize[0]));
124 memcpy(picref->data, pic->data, sizeof(picref->data));
125 memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
126
127 pic-> extended_data = pic->data;
128 picref->extended_data = picref->data;
129
131
132 return picref;
133
134 fail:
135 if (picref && picref->video)
139 return NULL;
140 }
141 #endif
142
144 {
146
149
152
153 if (!ret)
155
157 }